Imports CharterDotCom.CommonEntities.Library.Enumerations
Imports System.Reflection
Imports System.Text

Public Class EntityG2BServices
    <Serializable()> _
    Public Class G2BCommonResponse
        Inherits ProviderResults
        Implements IProviderResults

    End Class

#Region "G2B SubmitOrder"
    ''' <summary>
    ''' G2BSubmitOrderRequest contains data used to pass information
    ''' from the Web Server front end to the App Server layer to make a
    ''' SubmitOrder web service call
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BSubmitOrderRequest: {m_offerOrder.Count} Orders, Tracking ID {m_trackingID} ")> _
    Public Class G2BSubmitOrderRequest
        Inherits ProviderRequests
        Implements IProviderParameters
        Private m_offerOrder As List(Of OfferOrderTypeG2BOrder)
        Private m_discount As List(Of DiscountTypeOrder)
        Private m_firstName As String
        Private m_lastName As String
        Private m_serviceAddressPhone As String
        Private m_contactPhone As String
        Private m_email As String
        Private m_contactInstructions As String
        Private m_creditCard As CreditCardType
        Private m_shippingAddress As Address
        Private m_additionalInfo As String
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String
        Private m_resend As Integer
        Private m_isMoving As Boolean
        ' 8/2007 jwg added for g2b4.1
        Private m_CustomerHardware As List(Of CustomerHardwareType)

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            sb.Append("<BR/><hr><B>G2BSubmitOrderRequest</B><BR/>")
            Dim t As Type
            Dim pi As PropertyInfo
            'sb.Append("<BR/>" + "MSO ID " & Me.m_mSOID)
            Try
                t = Me.GetType()
                For Each mi As System.Reflection.PropertyInfo In t.GetProperties()
                    ' see if we have a plain property or if the property is 
                    ' a dictionary.  can't do "toString()" on a dictionary
                    ' object
                    pi = Me.GetType().GetProperty(mi.Name)
                    If ((pi.PropertyType.IsPrimitive OrElse pi.PropertyType.Name = "String") _
                      AndAlso _
                         pi.PropertyType.ToString().IndexOf("Dictionary") = -1) Then
                        sb.Append("<BR/>&nbsp;&nbsp;&nbsp;" & _
                                mi.Name & " (<i>" & pi.PropertyType.Name & "</i>) : " & _
                                pi.GetValue(Me, Nothing))
                    End If
                Next mi

                If (Me.m_shippingAddress IsNot Nothing) Then
                    sb.Append("<BR/>Shipping Address: " & Me.m_shippingAddress.ToString())
                End If

                sb.Append("<BR/><B>OfferOrders</B>")
                ' show all offerorders
                If (m_offerOrder IsNot Nothing) Then
                    For Each tmpOffer As OfferOrderTypeG2BOrder In m_offerOrder
                        sb.Append("<BR>" & tmpOffer.ToString())
                    Next
                End If
                sb.Append("<BR/><B>DiscountTypeOrders</B>")
                ' show all discounts
                If (m_discount IsNot Nothing) Then
                    For Each tmpOffer As DiscountTypeOrder In m_discount
                        sb.Append("<BR>" & tmpOffer.ToString())
                    Next
                End If
                sb.Append("<BR/><B>Customer Hardware</B>")
                ' show all customer hardware
                If (m_CustomerHardware IsNot Nothing) Then
                    For Each tmpOffer As CustomerHardwareType In m_CustomerHardware
                        sb.Append("<BR>" & tmpOffer.ToString())
                    Next
                End If

                sb.Append("<br><hr>")
                Return sb.ToString
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''OfferOrder <BR/>
        '''The set of elements that comprise the service offer identifiers and consumer specifics for the ordered service. 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-10 
        ''' </summary>
        ''' <remarks></remarks>
        Public ReadOnly Property OfferOrder() As List(Of OfferOrderTypeG2BOrder)
            Get
                Return m_offerOrder
            End Get
        End Property

        ''' <summary>
        ''' The set of elements and attributes that comprise an explanation
        ''' for the consumer of the savings, if any, associated with the
        ''' purchase of multiple service offerings
        ''' <BR/>Attributes: DiscountID, OfferType, Frequency, Amount,
        ''' Description, OfferID
        ''' <BR/>Min/max occurs: 20
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Discount() As List(Of DiscountTypeOrder)
            Get
                Return m_discount
            End Get
            Set(ByVal value As List(Of DiscountTypeOrder))
                m_discount = value
            End Set
        End Property

        ''' <summary>
        '''FirstName <BR/>
        '''The consumer's First Name. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-30
        '''<BR/>Some MSO systems apply additional restrictions to customer data. For example, Time Warner will reject the 
        '''order if any special characters appear in the first name or last name fields. It 
        '''may be advisable to check with specific MSOs for additional data requirements or restrictions. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property FirstName() As String
            Get
                Return m_firstName
            End Get
        End Property

        ''' <summary>
        '''LastName <BR/>
        '''The consumer's surname. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-30
        '''<BR/>Some MSO systems apply additional restrictions to customer data. For example, Time Warner will reject the 
        '''order if any special characters appear in the first name or last name fields. It 
        '''may be advisable to check with specific MSOs for additional data requirements or restrictions. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property LastName() As String
            Get
                Return m_lastName
            End Get
        End Property
        ''' <summary>
        '''ServiceAddressPhone  <BR/>
        '''The telephone number at the service address. May differ from ContactPhone. 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: \d{10} 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ServiceAddressPhone() As String
            Get
                Return m_serviceAddressPhone
            End Get
        End Property
        ''' <summary>
        '''ContactPhone <BR/>
        '''The consumer-provided telephone number at which they are most likely to be reached. 
        '''May differ from ServiceAddressPhone. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 
        '''\d{10}(\s*\d{0,})?
        '''<BR/>ContactPhone may include an extension after the 10-digit number. Whitespace may be used to separate 
        '''the extension. The Affiliate Site should ensure that the consumer enters only numeric 
        '''digits for the telephone number. Some MSO systems apply additional 
        '''restrictions to customer data. For example, Time Warner will reject the 
        '''order if the customer phone number contains 123 or 555 in the area code 
        '''(digits 1-3) or exchange (digits 4 - 6). It may be advisable to check with 
        '''specific MSOs for additional data requirements or restrictions. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ContactPhone() As String
            Get
                Return m_contactPhone
            End Get
        End Property
        ''' <summary>
        ''' The consumer's email address<BR/>
        ''' use: Optional<BR/>
        ''' data type: String<BR/>
        ''' min/max occurs: 0-1<BR/>
        ''' min/max length: 1-200<BR/>
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Email() As String
            Get
                Return m_email
            End Get
        End Property
        ''' <summary>
        '''ContactInstructions <BR/>
        '''Any additional contact details the consumer wishes to provide; e.g., best time of day to contact, which 
        '''telephone number to use, etc. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ContactInstructions() As String
            Get
                Return m_contactInstructions
            End Get
        End Property
        ''' <summary>
        ''' Used to provide the consumer's credit card info to the MSO, if the
        ''' Affiliate's business deal with the MSO requires collection of credit
        ''' card information.
        ''' <BR/>use: optional
        ''' <BR/>data type: n/a
        ''' <BR/>Elements: Name, Number, Expiration, SecurityCode,
        ''' BillingFullName, BillingPhone, BillingAddrses
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property CreditCard() As CreditCardType
            Get
                Return m_creditCard
            End Get
        End Property
        ''' <summary>
        '''ShippingAddress  <BR/>
        '''Delivery address for consumer equipment, software, etc. May differ from the service Address. 
        ''' <BR/>Elements: AddressLine, Suite, City, State, Zip, Zipe4 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ShippingAddress() As Address
            Get
                Return m_shippingAddress
            End Get
        End Property

        ''' <summary>
        '''AdditionalInfo <BR/> 
        '''Contains any comments the consumer would like to enter for the MSO, to help complete the sale. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000
        ''' </summary>
        Public ReadOnly Property AdditionalInfo() As String
            Get
                Return m_additionalInfo
            End Get
        End Property

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property

        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property

        ''' <summary>
        '''Resend  <BR/>
        '''The number of times an order message has been sent. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  100 
        '''<BR/>The initial order submission Resend value should be 0 (zero). Subsequent submissions should increment the 
        '''Resend counter. NOTE: Affiliates are not required to resubmit in the case of a message failure. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Resend() As Integer
            Get
                Return m_resend
            End Get
        End Property

        Public ReadOnly Property IsMoving() As Boolean
            Get
                Return m_isMoving
            End Get
        End Property
        ''' <summary>
        ''' A collection of data items to support auto-provisioning
        ''' <BR/>use: optional
        ''' <BR/>min/max occurs: 0-10
        ''' <BR/>Attributes: Category, MACAddress, SerialNumber
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CustomerHardware() As List(Of CustomerHardwareType)
            Get
                Return Me.m_CustomerHardware
            End Get
            Set(ByVal value As List(Of CustomerHardwareType))
                Me.m_CustomerHardware = value
            End Set
        End Property

        Public Sub New(ByVal plstofferOrder As List(Of OfferOrderTypeG2BOrder), _
            ByVal pstrfirstName As String, _
            ByVal pstrlastName As String, _
            ByVal pstrserviceAddressPhone As String, _
            ByVal pstrcontactPhone As String, _
            ByVal pstremail As String, _
            ByVal pstrcontactInstructions As String, _
            ByVal pcreditCard As CreditCardType, _
            ByVal pshippingAddress As Address, _
            ByVal pstradditionalInfo As String, _
            ByVal pinttrackingID As Integer, _
            ByVal pintmSOID As Integer, _
            ByVal pstraddressID As String, _
            ByVal pintresend As Integer, _
            ByVal pblnisMoving As Boolean, _
            ByVal pobjCustHardware As List(Of CustomerHardwareType))

            Me.m_offerOrder = plstofferOrder
            Me.m_discount = Discount
            Me.m_firstName = pstrfirstName
            Me.m_lastName = pstrlastName
            Me.m_serviceAddressPhone = pstrserviceAddressPhone
            Me.m_contactPhone = pstrcontactPhone
            Me.m_email = pstremail
            Me.m_contactInstructions = pstrcontactInstructions
            Me.m_creditCard = pcreditCard
            Me.m_shippingAddress = pshippingAddress
            Me.m_additionalInfo = pstradditionalInfo
            Me.m_trackingID = pinttrackingID
            Me.m_mSOID = pintmSOID
            Me.m_addressID = pstraddressID
            Me.m_resend = pintresend
            m_isMoving = pblnisMoving
            Me.m_CustomerHardware = pobjCustHardware
        End Sub
    End Class

    ''' <summary>
    ''' G2BSubmitOrderResponse contains data used to pass information
    ''' from the App Server to the Web Server layer after completion of a
    ''' SubmitOrder web service call
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BSubmitOrderResponse: {_confirmation.Count} Confirmations, Result code {_Results.Code} ")> _
    Public Class G2BSubmitOrderResponse

        Inherits ProviderResults
        Implements IProviderResults
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String
        Private m_confirmation As List(Of ConfirmationType)
        Private m_WSResponseCode As Integer
        ' 8/2007 jwg added for g2b 4.1
        Private m_Results As Result
        Private m_Eligibility As EligibilityType
        Const br As String = "<br/>"

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            sb.Append("<h3>G2B Submit Order Response</h3>" & br)
            sb.Append("Tracking ID: " & m_trackingID & br)
            sb.Append("MSO ID: " & m_mSOID & br)
            sb.Append("Address ID: " & m_addressID & br)
            sb.Append("WS Response: " & m_WSResponseCode.ToString() & br)
            If (m_Results IsNot Nothing) Then
                sb.Append("Results: " & m_Results.ToString() & br)
            End If
            If (m_Eligibility IsNot Nothing) Then
                sb.Append("Eligibility: " & m_Eligibility.ToString() & br)
            End If
            If (m_confirmation IsNot Nothing) Then
                sb.Append("<B>Confirmations</B>" & br)
                For iItem As Integer = 0 To m_confirmation.Count - 1
                    sb.Append(m_confirmation(iItem).ToString() & br)
                Next
            End If
            Return sb.ToString()
        End Function
        ''' <summary>
        '''The numeric Code and any text describing a status or an exception condition.
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 0-200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Results() As Result
            Get
                Return m_Results
            End Get
            Set(ByVal value As Result)
                m_Results = value
            End Set
        End Property

        ''' <summary>
        ''' If Authentication is supported and the customer chose to participate, 
        ''' this element houses the set of data items that can be returned by 
        ''' the MSO as a result of a successful Authentication.<BR/>
        ''' Attributes: AccountNumber, BillingCycle, DepositAmount, CreditClass<BR/>
        ''' use: Optional<BR/>
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Eligibility() As EligibilityType
            Get
                Return m_Eligibility
            End Get
            Set(ByVal value As EligibilityType)
                m_Eligibility = value
            End Set
        End Property

        Public Property WS_ResponseCode() As Integer
            Get
                Return m_WSResponseCode
            End Get
            Set(ByVal value As Integer)
                m_WSResponseCode = value
            End Set
        End Property

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property

        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' <BR/>The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' <BR/>The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property

        ''' <summary>
        '''Confirmation 
        '''Indicates that the MSO has received the order request. 
        ''' <BR/>Elements: InstallWindow 
        ''' <BR/>Attributes: OfferID, OrderConfirmationID, FollowupMessage 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-10
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Confirmation() As List(Of ConfirmationType)
            Get
                Return m_confirmation
            End Get
        End Property

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub

        Public Sub New(ByVal trackingID As Integer, ByVal mSOID As Integer, ByVal addressID As String, ByVal confirmation As List(Of ConfirmationType))
            Me.m_trackingID = trackingID
            Me.m_mSOID = mSOID
            Me.m_addressID = addressID
            Me.m_confirmation = confirmation
        End Sub

        Public Sub New(ByVal trackingID As Integer, _
                ByVal mSOID As Integer, _
                ByVal addressID As String, _
                ByVal confirmation As List(Of ConfirmationType), _
                ByVal pobjResult As Result, _
                ByVal pobjElig As EligibilityType)

            Me.new(trackingID, mSOID, addressID, confirmation)
            Me.m_Results = pobjResult
            Me.m_Eligibility = pobjElig

        End Sub
    End Class

    ''' <summary>
    ''' The set of elements that comprise the service offer identifiers and consumer specifics for the ordered service.
    ''' <BR/>use: Required
    ''' <BR/>data type: n/a
    ''' <BR/>min/max occurs: 1-10
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("OfferOrderTypeG2BOrder: ID {offerIDField} {_customizationField.Count} Customizations")> _
    Public Class OfferOrderTypeG2BOrder

        Private m_customizationField As List(Of CustomizationTypeOrder)
        Private m_offerIDField As String
        Private m_versionField As Decimal
        Private m_affiliateOrderIDField As String
        Private m_affiliateLineIDField As String
        Private m_affiliateInstallField As Boolean

        Public Overrides Function ToString() As String
            Dim sb As New StringBuilder(1000)

            sb.Append("<B>OfferOrderTypeG2BOrder</B><BR/>")
            sb.Append("OfferID : " & m_offerIDField & "<BR/>")
            sb.Append("Affiliate Order ID : " & m_affiliateOrderIDField & "<BR/>")
            sb.Append("Affiliate Line ID : " & m_affiliateLineIDField & "<BR/>")
            sb.Append("Affiliate Install: " & m_affiliateInstallField.ToString & "<BR/>")

            For Each objCust As CustomizationTypeOrder In m_customizationField
                sb.Append("Customization: " & objCust.ToString() & "<BR/>")
            Next

            Return sb.ToString
        End Function

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
            MyBase.New()
            Me.m_affiliateInstallField = False
        End Sub

        Public Sub New(ByVal customization As List(Of CustomizationTypeOrder), ByVal offerID As String, Optional ByVal version As Decimal = 4.1D)
            Me.m_customizationField = customization
            Me.m_offerIDField = offerID
            Me.Version = version
        End Sub

        ''' <summary>
        ''' The set of elements that comprise additional service choices that allow 
        ''' the consumer to tailor a service offer to suit their needs.<BR/>
        ''' Elements: Selection, Text, Number<BR/>
        ''' Attributes: CustomizationID, Name, Category<BR/>
        ''' use: Optional<BR/>
        ''' data type: n/a<BR/>
        ''' min/max occurs: 0-20
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Customization() As List(Of CustomizationTypeOrder)
            Get
                Return Me.m_customizationField
            End Get
            Set(ByVal value As List(Of CustomizationTypeOrder))
                Me.m_customizationField = value
            End Set
        End Property

        ''' <summary>
        '''OfferID <BR/>
        '''The MSO-assigned identifier for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferID() As String
            Get
                Return Me.m_offerIDField
            End Get
            Set(ByVal value As String)
                Me.m_offerIDField = value
            End Set
        End Property

        ''' <summary>
        '''Version  <BR/>
        '''Specifies the MSO's edition number for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Version() As Decimal
            Get
                Return Me.m_versionField
            End Get
            Set(ByVal value As Decimal)
                Me.m_versionField = value
            End Set
        End Property

        ''' <summary>
        '''AffiliateOrderID 
        '''The Affiliate-assigned identifier for an order being submitted. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site can use this attribute to track the order. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AffiliateOrderID() As String
            Get
                Return Me.m_affiliateOrderIDField
            End Get
            Set(ByVal value As String)
                Me.m_affiliateOrderIDField = value
            End Set
        End Property

        ''' <summary>
        '''AffiliateLineID 
        '''The Affiliate-assigned identifier for the order/invoice line number. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' <BR/>The Affiliate Site can use this attribute to track the order. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AffiliateLineID() As String
            Get
                Return Me.m_affiliateLineIDField
            End Get
            Set(ByVal value As String)
                Me.m_affiliateLineIDField = value
            End Set
        End Property

        ''' <summary>
        '''AffiliateInstall <BR/>
        '''
        '''Indicates whether the Affiliate can provide professional installation services for the 
        '''requested service offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>format: xs: boolean
        '''<BR/>Default = false or 0 (zero). The Affiliate should only use this attribute if they have a business 
        '''agreement with the MSO that allows them to install cable service. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AffiliateInstall() As Boolean
            Get
                Return Me.m_affiliateInstallField
            End Get
            Set(ByVal value As Boolean)
                Me.m_affiliateInstallField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' The set of elements that comprise additional service choices that allow the consumer to tailor a service offer to suit their needs.<BR/>
    ''' Elements: Selection, Text, Number<BR/>
    ''' Attributes: CustomizationID, Name, Category<BR/>
    ''' use: Optional<BR/>
    ''' data type: n/a<BR/>
    ''' min/max occurs: 0-20<BR/>
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("CustomizationTypeOrder: ID={customizationIDField}, items={itemsField.ToString()}")> _
    Public Class CustomizationTypeOrder

        Private m_itemsField As Object

        Private m_customizationIDField As String

        Public Overrides Function ToString() As String
            Return "<B>Customization<B><BR/>" & _
                    "ID : " & m_customizationIDField & "<BR/>" & _
                    "Items : " & m_itemsField.ToString() & "<BR/>"
        End Function
        ''' <summary>
        ''' SelectionType, InputTextType, or Number for a customization
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Items() As Object
            Get
                Return Me.m_itemsField
            End Get
            Set(ByVal value As Object)
                Me.m_itemsField = value
            End Set
        End Property

        ''' <summary>
        '''CustomizationID  <BR/>
        ''' The MSO-Assigned identifier for a customization selected by a customer
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CustomizationID() As String
            Get
                Return Me.m_customizationIDField
            End Get
            Set(ByVal value As String)
                Me.m_customizationIDField = value
            End Set
        End Property

        Public Sub New(ByVal items As Object, ByVal customizationID As String)
            Me.m_itemsField = items
            Me.m_customizationIDField = customizationID
        End Sub
    End Class

    ''' <summary>
    ''' The set of elements that comprise the additional choices and prices in a 
    ''' Customization, from which the consumer can select to tailor the service offer
    ''' to suit their needs<BR/>
    ''' Elements: Choice<BR/>
    ''' Attributes: Min, Max <BR/>
    ''' use: required <BR/>
    ''' data type: n/a <BR/>
    ''' min/max occurs: 1-1
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
      <DebuggerDisplay("SelectionTypeOrder: {choiceIDsField.Count} Choices")> _
    Public Class SelectionTypeOrder

        Private m_choiceIDsField As List(Of String)

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            sb.Append("SelectionTypeOrder<BR/>")
            For Each strTemp As String In m_choiceIDsField
                sb.Append("Choice ID: " & strTemp & "<BR/>")
            Next
            Return sb.ToString()
        End Function
        ''' <summary>
        ''' List of MSO-assigned identifier(s) for the option(s) selected by the consumer and included by the Affiliate with the order submission.<BR/>
        ''' use: Required<BR/>
        ''' data type: String<BR/>
        ''' min/max occurs: 1-10<BR/>
        ''' min/max length: 1-30<BR/>
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ChoiceIDs() As List(Of String)
            Get
                Return m_choiceIDsField
            End Get
            Set(ByVal value As List(Of String))
                m_choiceIDsField = value
            End Set
        End Property

        Public Sub New(ByVal choices As List(Of String))
            Me.m_choiceIDsField = choices
        End Sub

    End Class

    ''' <summary>
    ''' The set of elements and attributes that comprise an explanation for
    ''' the consumer of the savings, if any, associated with the purchase of
    ''' multiple service offerings.
    ''' <BR/>Elements: Requires
    ''' <BR/>Attributes: DiscountID, offerType, Frequency, Amount
    ''' <BR/>use: optional
    ''' <BR/>min/max occurs: 0-20
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("DiscountTypeOrder: ID={discountIDField}")> _
    Public Class DiscountTypeOrder

        Private m_discountIDField As String
        ''' <summary>
        ''' The MSO-assigned ID for the discount the consumer can receive
        ''' use: Required
        ''' type: string
        ''' min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DiscountID() As String
            Get
                Return Me.m_discountIDField
            End Get
            Set(ByVal value As String)
                Me.m_discountIDField = value
            End Set
        End Property
    End Class

#End Region

#Region "G2B Cancel Order"
    ''' <summary>
    '''CancelOrder  <BR/>
    '''The set of elements that comprise an Affiliate's request, on behalf of a consumer, to cancel a 
    '''submitted order. 
    ''' <BR/>Elements: TrackingID, MSOID, OrderConfirmation, ReasonCode, AffiliateOrderID, AddressID 
    '''<BR/>use: Required if using the CancelOrder Web service 
    '''<BR/>data type: n/a 
    '''<BR/>
    '''NOTE: Each MSO defines their respective time limit for accepting order cancellations. If the order has 
    '''already been fulfilled, a cancellation may not be accepted.
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class G2BCancelOrderRequest
        Inherits ProviderRequests
        Implements IProviderParameters
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String
        Private m_orderConfirmationID As String
        Private m_reasonCode As CancellationReasonEnumumeration
        Private m_affiliateOrderID As String
        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property
        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property
        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property
        ''' <summary>
        '''OrderConfirmationID <BR/>
        '''The MSO-provided identifier for the consumer's order. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        '''<BR/>The Affiliate Site should display this attribute to the consumer following order submission.        
        '''</summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property OrderConfirmationID() As String
            Get
                Return m_orderConfirmationID
            End Get
        End Property
        ''' <summary>
        '''ReasonCode <BR/>
        '''The basis for canceling an order. 
        '''<BR/>use: Required 
        '''<BR/>data type: 
        '''<BR/>enumeration: ChangedMind, EntryError, InstallWindows, ReturnedEquipment, SalesError        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ReasonCode() As CancellationReasonEnumumeration
            Get
                Return m_reasonCode
            End Get
        End Property
        ''' <summary>
        '''AffiliateOrderID 
        '''The Affiliate-assigned identifier for an order being submitted. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site can use this attribute to track the order. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AffiliateOrderID() As String
            Get
                Return m_affiliateOrderID
            End Get
        End Property

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
        Public Sub New(ByVal trackingID As Integer, ByVal mSOID As Integer, ByVal addressID As String, ByVal orderConfirmationID As String, ByVal reasonCode As CancellationReasonEnumumeration, ByVal affiliateOrderID As String)
            Me.m_trackingID = trackingID
            Me.m_mSOID = mSOID
            Me.m_addressID = addressID
            Me.m_orderConfirmationID = orderConfirmationID
            Me.m_reasonCode = reasonCode
            Me.m_affiliateOrderID = affiliateOrderID
        End Sub
    End Class

    ''' <summary>
    '''CancelOrderResponse <BR/>
    '''The set of elements that comprise G2B status and G2B's response, on behalf an MSO, to a submitted cancellation 
    '''request. 
    ''' <BR/>Elements: CancelOrderResult, CancelOrderConfirmation 
    ''' <BR/>Attributes: TrackingID, MSOID, AddressID 
    '''<BR/>use: Required 
    '''<BR/>data type: n/a 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class G2BCancelOrderResponse

        Inherits ProviderResults
        Implements IProviderResults
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String
        Private m_cancelOrderConfirmation As ConfirmationCancelType
        ' 8/2007 jwg added for g2b v4.1
        Private m_result As Result = New Result()

        ''' <summary>
        '''CancelOrderResult <BR/>
        '''The numeric Code and any text describing a status or an exception condition. 
        ''' <BR/>Attributes: Code 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 0-200
        '''
        '''The Affiliate Site should not display this element to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CancelOrderResults() As Result
            Get
                Return m_result
            End Get
            Set(ByVal value As Result)
                m_result = value
            End Set
        End Property
        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property
        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property
        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property
        Public ReadOnly Property CancelOrderConfirmation() As ConfirmationCancelType
            Get
                Return m_cancelOrderConfirmation
            End Get
        End Property
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
        Public Sub New(ByVal trackingID As Integer, ByVal mSOID As Integer, ByVal addressID As String, ByVal cancelOrderConfirmation As ConfirmationCancelType)
            Me.m_trackingID = trackingID
            Me.m_mSOID = mSOID
            Me.m_addressID = addressID
            Me.m_cancelOrderConfirmation = cancelOrderConfirmation
        End Sub

        Public Sub New(ByVal trackingID As Integer, _
    ByVal mSOID As Integer, _
    ByVal addressID As String, _
    ByVal cancelOrderConfirmation As ConfirmationCancelType, _
    ByVal pobjResult As Result)

            Me.New(trackingID, mSOID, addressID, cancelOrderConfirmation)
            Me.m_result = pobjResult

        End Sub
    End Class

    Public Enum CancellationReasonEnumumeration
        m_ChangedMind

        m_EntryError

        m_ReturnedEquipment

        m_SalesError

        m_InstallWindows
    End Enum

    ''' <summary>
    '''CancelOrderConfirmation  <BR/>
    '''The MSO's response to a submitted request to cancel an order. 
    ''' <BR/>Attributes: '''CancelOrderConfirmationID, Follow-upMessage 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-1 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Confirmation Cancel: ID {CancelOrderConfirmationID}, Message {FollowUpMessage}")> _
    Public Class ConfirmationCancelType

        Private m_cancelOrderConfirmationIDField As String
        Private m_followUpMessageField As String

        ''' <summary>
        '''CancelOrderConfirmationID <BR/>
        '''The MSO-assigned identifier for the cancelled order. 
        '''<BR/>use: Required if using the CancelOrderConfirmation element. 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        '''<BR/>
        '''The Affiliate Site should display this attribute to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CancelOrderConfirmationID() As String
            Get
                Return Me.m_cancelOrderConfirmationIDField
            End Get
            Set(ByVal value As String)
                Me.m_cancelOrderConfirmationIDField = value
            End Set
        End Property

        ''' <summary>
        '''FollowUpMessage <BR/>
        '''Verbiage explaining what the consumer can expect relative to service installation 
        '''and/or any final information the MSO wishes the consumer to have; e.g., order 
        '''number, order cancellation acknowledgement, toll-free support telephone 
        '''number, etc. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-500
        '''
        '''The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms and industry jargon. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property FollowUpMessage() As String
            Get
                Return Me.m_followUpMessageField
            End Get
            Set(ByVal value As String)
                Me.m_followUpMessageField = value
            End Set
        End Property
    End Class

#End Region

#Region "G2B Query Offers"

    ''' <summary>
    ''' G2BQueryOffersRequest contains data used to pass information
    ''' from the Web Server front end to the App Server layer to make a
    ''' QueryOffers web service call
    ''' </summary>
    ''' <remarks><BR/>Elements: RequestingAffiliate, OriginatingAffiliate, Address, PrivacyNotice, Request, Subscriber, ServiceAddressPhone, Language, NewCustomer, PromotionCode, NumberToPort 
    ''' </remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BQueryOffersRequest: {_addr}, Affiliate {_affliateID} ")> _
    Public Class G2BQueryOffersRequest
        Inherits ProviderRequests
        Implements IProviderParameters
        Private m_addr As Address
        Private m_requestLOB As List(Of ServiceType)
        Private m_affliateID As Integer

        Private m_region As Integer
        Private m_kma As Integer
        Private m_billing As Integer
        Private m_fta As String
        ' 8/2007 jwg added for g2b v4.1
        Private m_newCustomerField As NewCustomerType
        Private m_promotionCodeField As Dictionary(Of String, String)
        Private m_numberToPortField As String
        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)
            Try
                sb.Append("<BR/><B>G2BQueryOffersRequest</B>")
                sb.Append("<BR/>Affilliate: " & Me.AffliateID.ToString())
                sb.Append("<BR/>Address: " & Me.Address.Street1 & "," & _
                                Me.Address.Street2 & ", " & _
                                Me.Address.City & ", " & _
                                Me.Address.State & "  " & _
                                Me.Address.Zip & Me.Address.Zip4)
                sb.Append("<BR/>Billing Station: " & Me.BillingStationID.ToString())
                sb.Append("<BR/>FTA: " & Me.FTA.ToString())
                sb.Append("<BR/>KMA: " & Me.KMAID.ToString())
                sb.Append("<BR/>Region ID: " & Me.RegionID.ToString())
                If (Me.requestLOB IsNot Nothing) Then
                    For iLOB As Integer = 0 To requestLOB.Count - 1
                        sb.Append("<BR/>LOB " & requestLOB(iLOB).ToString())
                    Next
                End If
                If (Me.m_newCustomerField IsNot Nothing) Then
                    sb.Append("<BR/>New Customer " & Me.m_newCustomerField.ToString())
                End If
                sb.Append("<BR/>Promotion Code " & Utility.DefaultString(Me.m_promotionCodeField) & _
                           "<BR/>Number To Port " & Utility.DefaultString(Me.m_numberToPortField) & "<BR/><HR><BR/>")
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''NewCustomer <BR/>
        '''A member of the set of data items used by MSOs to tell affiliates what items to collect from consumers in order to perform Authentication. 
        ''' <BR/>Elements: 
        '''StandardAuthField, CustomAuthField 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-5 
        '''<BR/>min/max length: n/a
        '''<BR/>NewCustomer Indicates if the Authentication request is for a new customer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property NewCustomer() As NewCustomerType
            Get
                Return Me.m_newCustomerField
            End Get
            Set(ByVal value As NewCustomerType)
                Me.m_newCustomerField = value
            End Set
        End Property
        ''' <summary>
        '''PromotionCode <BR/>
        '''Allows a consumer to enter a special code related to a promotion currently running by the MSO. The MSO will respond with offers related to that code. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PromotionCode() As Dictionary(Of String, String)
            Get
                Return Me.m_promotionCodeField
            End Get
            Set(ByVal value As Dictionary(Of String, String))
                Me.m_promotionCodeField = value
            End Set
        End Property
        ''' <summary>
        '''NumberToPort <BR/>
        '''The 10-digit wireless phone number the consumer wishes to carry with them to another wireless service provider. The consumer submits this number to inquire if their number can be ported, not to actually perform the porting activity. The MSO should respond with a positive or negative in the QueryOffersResponse message via the NumberPortable attribute. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 10-10 
        '''<BR/>format: Pattern '\d{10}'
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property NumberToPort() As String
            Get
                Return Me.m_numberToPortField
            End Get
            Set(ByVal value As String)
                Me.m_numberToPortField = value
            End Set
        End Property

        ''' <summary>
        ''' The parsed Address element contains the set of elements that comprise the result of the G2B postal scrubbing function performed on the raw (unparsed) Address element in QueryOffers.
        ''' <BR/>The parsed consumer address is used to determine serviceability.
        ''' <BR/>Elements: Predir, PrimRange, PrimName, Suffix, Postdir, UnitDesig, SecRange, City, State, Zip, Zip4
        ''' <BR/>use: Required
        ''' <BR/>data type: n/a
        ''' <BR/>min/max occurs: 1-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Address() As Address
            Get
                Return m_addr
            End Get
            Set(ByVal value As Address)
                m_addr = value
            End Set
        End Property

        ''' <summary>
        '''Specifies the service(s) the consumer is interested in. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-10 
        '''<BR/>enumeration: CableHighSpeedData, CableBasicVideo, CableDigitalVideo, CableHDVideo, CableDVR, CableVoice, CableHomeNetwork, CableWirelessVoice
        '''<BR/>The exact services requested must be specified. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property requestLOB() As List(Of ServiceType)
            Get
                Return m_requestLOB
            End Get
            Set(ByVal value As List(Of ServiceType))
                m_requestLOB = value
            End Set
        End Property

        ''' <summary>
        '''AffiliateID <BR/>
        '''Identifies the Affiliate to the G2B system and the MSO. The AffiliateID is 
        '''assigned by CableLabs as part of the Affiliate agreement. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''minInclusive: 100000 
        '''maxInclusive: 999999
        '''
        '''The AffiliateID should be the same for all messages submitted for a specific consumer request. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AffliateID() As Integer
            Get
                Return m_affliateID
            End Get
            Set(ByVal value As Integer)
                m_affliateID = value
            End Set
        End Property

        Public Property RegionID() As Integer
            Get
                Return m_region
            End Get
            Set(ByVal value As Integer)
                m_region = value
            End Set
        End Property

        Public Property KMAID() As Integer
            Get
                Return m_kma
            End Get
            Set(ByVal value As Integer)
                m_kma = value
            End Set
        End Property

        Public Property BillingStationID() As Integer
            Get
                Return m_billing
            End Get
            Set(ByVal value As Integer)
                m_billing = value
            End Set
        End Property

        Public Property FTA() As String
            Get
                Return m_fta
            End Get
            Set(ByVal value As String)
                m_fta = value
            End Set
        End Property

        Public Sub New(ByVal inAddress As Address, ByVal requestLOB As List(Of ServiceType), ByVal affliateID As Integer)
            Me.m_addr = inAddress
            Me.m_requestLOB = requestLOB
            m_affliateID = affliateID
        End Sub
    End Class

    ''' <summary>
    ''' G2BQueryOffersResponse is the object returned to the 
    ''' calling program (normally the Web Server) by the App Server.
    ''' This version corresponds to G2B's version 4.1 message format.
    ''' </summary>
    ''' <remarks>This object contains the data to be displayed
    ''' to the customer based on information received from Cable Labs/Go2Broadband.
    ''' <BR/>
    ''' <BR/>Elements: QueryOffersResult, Address, MSOOffersResponse  <BR/>Attributes: TrackingID 
    '''<BR/>use: Required
    ''' </remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BQueryOffersResponse: {DisplayFunc}")> _
    Public Class G2BQueryOffersResponse
        Inherits ProviderResults
        Implements IProviderResults
        Private m_productCatalog As ProductCatalog
        Private m_trackingID As Integer
        Private m_addressSuggestion() As USAddressSuggestionType
        Private m_mSOID As Integer
        Private m_rules As Rules
        ' 8/2007 jwg added for g2b 4.1
        Private m_results As Result
        Private m_customerAuthFieldDefinition As CustomerAuthFieldDefinitionType
        Private m_discount As List(Of DiscountTypeQueryOffers)

        Public ReadOnly Property DisplayFunc() As String
            Get
                If (Me.Exception) Then
                    Return "Exception: " & Me.ExceptionMessage
                End If

                Return m_results.ToString() & ", " & _
                    m_productCatalog.Bundles.Count & " Bundles, " & _
                    m_productCatalog.ServicePlans.Count & " Service Plans."
            End Get
        End Property

        Public Property Results() As Result
            Get
                Return m_results

            End Get
            Set(ByVal value As Result)
                m_results = value
            End Set
        End Property

        ''' <summary>
        ''' The set of elements and attributes that comprise an explanation
        ''' for the consumer of the savings, if any, associated with the
        ''' purchase of multiple service offerings
        ''' <BR/>Attributes: DiscountID, OfferType, Frequency, Amount,
        ''' Description, OfferID
        ''' <BR/>Min/max occurs: 20
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Discount() As List(Of DiscountTypeQueryOffers)
            Get
                Return m_discount
            End Get
            Set(ByVal value As List(Of DiscountTypeQueryOffers))
                m_discount = value
            End Set
        End Property

        ''' <summary>
        ''' A collection of data items that allows MSOs to tell Affiliates
        ''' what data items they must collect from the consumer in order to
        ''' provide Authentication.<BR/>
        ''' Sub Elements: NewCustomer, ExistingCustomer<BR/>
        ''' use: optional<BR/>
        ''' min/max occurs: 0-1<BR/>
        ''' </summary>
        ''' <remarks></remarks>
        Public Property CustomerAuthFieldDefinition() As CustomerAuthFieldDefinitionType
            Get
                Return m_customerAuthFieldDefinition
            End Get
            Set(ByVal value As CustomerAuthFieldDefinitionType)
                m_customerAuthFieldDefinition = value
            End Set
        End Property

        ''' <summary>
        ''' Service Plans and Bundles contained in the Query Offer Response
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ProductCatalog() As ProductCatalog
            Get
                Return m_productCatalog
            End Get
        End Property
        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property
        ''' <summary>
        ''' If the MSO cannot find an exact match for the entered address in their system, but has found one or more addresses that may be a match, those possible matches are returned in this element.
        ''' <BR/>Elements: AddressLine, Suite, City, State, Zip, Zip4
        ''' <BR/>Attributes: AddressID
        ''' <BR/>use: Optional
        ''' <BR/>data type: n/a
        ''' <BR/>min/max occurs: 0-100
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressSuggestion() As USAddressSuggestionType()
            Get
                Return m_addressSuggestion
            End Get
        End Property
        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property
        Public Sub New(ByVal productCatalog As ProductCatalog, ByVal trackingID As Integer, ByVal msoID As Integer, ByVal addressSuggestion() As USAddressSuggestionType, ByVal rules As Rules)
            Me.m_productCatalog = productCatalog
            Me.m_trackingID = trackingID
            Me.m_mSOID = msoID
            Me.m_addressSuggestion = addressSuggestion
            Me.m_rules = rules
        End Sub
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub

        ''' <summary>
        ''' Constructor to populate all elements
        ''' </summary>
        ''' <param name="productCatalog"></param>
        ''' <param name="trackingID"></param>
        ''' <param name="msoID"></param>
        ''' <param name="addressSuggestion"></param>
        ''' <param name="rules"></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal productCatalog As ProductCatalog, _
            ByVal trackingID As Integer, _
            ByVal msoID As Integer, _
            ByVal addressSuggestion() As USAddressSuggestionType, _
            ByVal rules As Rules, _
            ByVal results As Result, _
            ByVal pCustAuth As CustomerAuthFieldDefinitionType, _
            ByVal pDiscount As List(Of EntityG2BServices.DiscountTypeQueryOffers))

            Me.New(productCatalog, trackingID, msoID, addressSuggestion, rules)
            Me.m_results = results
            Me.m_customerAuthFieldDefinition = pCustAuth
            Me.m_discount = pDiscount
        End Sub

        Public ReadOnly Property Rules() As Rules
            Get
                Return m_rules
            End Get
        End Property

        ''' <summary>
        ''' Override of base ToString() to show component properties.
        ''' </summary>
        ''' <returns>String</returns>
        ''' <remarks></remarks>
        Public Overrides Function ToString() As String
            Dim sb As New StringBuilder(1000)
            Dim t As Type
            Dim pi As PropertyInfo
            sb.Append("<BR/><hr><B>G2B Query Offers Response</B><BR/>")
            'sb.Append("<BR/>" + "MSO ID " & Me.m_mSOID)
            Try
                t = Me.GetType()
                For Each mi As System.Reflection.PropertyInfo In t.GetProperties()
                    ' see if we have a plain property or if the property is 
                    ' a dictionary.  can't do "toString()" on a dictionary
                    ' object
                    pi = Me.GetType().GetProperty(mi.Name)
                    If ((pi.PropertyType.IsPrimitive OrElse pi.PropertyType.Name = "String") _
                        AndAlso _
                         pi.PropertyType.ToString().IndexOf("Dictionary") = -1) _
                        AndAlso _
                        ((pi.PropertyType.ToString().IndexOf("ProductCatalog") = -1) _
                            AndAlso _
                            (pi.PropertyType.ToString().IndexOf("Rules") = -1) _
                            AndAlso _
                            (pi.PropertyType.ToString().IndexOf("Result") = -1) _
                            AndAlso _
                            (pi.PropertyType.ToString().IndexOf("Discount") = -1) _
                            AndAlso _
                            (pi.PropertyType.ToString().IndexOf("CustomerAuthField") = -1)) Then

                        sb.Append("<BR/>&nbsp;&nbsp;&nbsp;" & _
                                mi.Name & " (<i>" & pi.PropertyType.Name & "</i>) : " & _
                                pi.GetValue(Me, Nothing))
                    End If
                Next mi
                If (Me.m_results IsNot Nothing) Then
                    sb.Append("<BR/>Results: " & Me.m_results.ToString())
                End If
                If (Me.m_customerAuthFieldDefinition IsNot Nothing) Then
                    sb.Append("<BR/>Customer Authorization: " & Me.m_customerAuthFieldDefinition.ToString())
                End If

                sb.Append("<BR/><B>Bundles</B>")
                ' show all bundles
                For Each kvp As KeyValuePair(Of String, Bundle) In Me.m_productCatalog.Bundles
                    sb.Append(kvp.ToString())
                Next kvp

                sb.Append("<BR/><B>Service Plans</B>")
                ' show all service plans
                For Each kvp As KeyValuePair(Of String, ServicePlan) In Me.m_productCatalog.ServicePlans
                    sb.Append(kvp.ToString())
                Next kvp

                sb.Append("<hr/>")
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function
    End Class

    ''' <summary>
    ''' This message is only used if the Affiliate supports an MSO implementation of the Address Suggestions feature.  The Affiliate would use this message to provide the consumer’s choice of an Address Suggestion to the MSO
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BQueryOffersResubmit: Tracking ID {m_trackingID.ToString()} ")> _
    Public Class G2BQueryOffersResubmitRequest
        Inherits ProviderRequests
        Implements IProviderParameters
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String
        Private m_affliateID As Integer

        Private m_region As Integer
        Private m_kma As Integer
        Private m_billing As Integer
        Private m_fta As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>G2BQueryOffersResubmitRequest")

                sb.Append("<BR/>Tracking ID: " & Me.TrackingID.ToString())
                sb.Append("<BR/>MSO ID: " & Me.MSOID.ToString())
                sb.Append("<BR/>Region ID: " & Me.RegionID.ToString())
                sb.Append("<BR/>Address ID: " & Me.AddressID)
                sb.Append("<BR/>Affillate ID: " & Me.AffliateID.ToString())
                sb.Append("<BR/>Billing Station ID: " & Me.BillingStationID.ToString())
                sb.Append("<BR/>FTA: " & Me.FTA.ToString())
                sb.Append("<BR/>KMA: " & Me.KMAID.ToString())

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property
        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property
        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property
        ''' <summary>
        '''AffiliateID <BR/>
        '''Identifies the Affiliate to the G2B system and the MSO. The AffiliateID is 
        '''assigned by CableLabs as part of the Affiliate agreement. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''minInclusive: 100000 
        '''maxInclusive: 999999
        '''
        '''The AffiliateID should be the same for all messages submitted for a specific consumer request. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AffliateID() As Integer
            Get
                Return m_affliateID
            End Get
            Set(ByVal value As Integer)
                m_affliateID = value
            End Set
        End Property

        Public Property RegionID() As Integer
            Get
                Return m_region
            End Get
            Set(ByVal value As Integer)
                m_region = value
            End Set
        End Property

        Public Property KMAID() As Integer
            Get
                Return m_kma
            End Get
            Set(ByVal value As Integer)
                m_kma = value
            End Set
        End Property

        Public Property BillingStationID() As Integer
            Get
                Return m_billing
            End Get
            Set(ByVal value As Integer)
                m_billing = value
            End Set
        End Property

        Public Property FTA() As String
            Get
                Return m_fta
            End Get
            Set(ByVal value As String)
                m_fta = value
            End Set
        End Property
        Public Sub New(ByVal trackingID As Integer, ByVal mSOID As Integer, ByVal addressID As String, ByVal affliateID As Integer)

            Me.m_addressID = addressID
            Me.m_trackingID = trackingID
            Me.m_mSOID = mSOID
            m_affliateID = affliateID
        End Sub
    End Class

    ''' <summary>
    ''' This message is only used if the Affiliate supports an MSO implementation of the Address Suggestions feature.  The Affiliate would use this message to provide the consumer’s choice of an Address Suggestion to the MSO
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BQueryOffersResubmitResponse: Results: _queryOffersResubmitResult.ToString(), {_itemsField.Count} items")> _
    Public Class G2BQueryOffersResubmitResponse

        Inherits ProviderResults
        Implements IProviderResults

        Private m_productCatalog As ProductCatalog
        Private m_rules As Rules
        ''' <summary>private container for <see cref="queryOffersResubmitResult"/> property</summary>
        Private m_queryOffersResubmitResult As Result = Nothing
        ''' <summary>private container for <see cref="ItemsField"/> property</summary>
        Private m_ItemsField As List(Of OfferType) = Nothing
        ''' <summary>private container for <see cref="Discount"/> property</summary>
        Private m_discount As List(Of DiscountTypeQueryOffers)
        ''' <summary>private container for <see cref="subscriber"/> property</summary>
        Private m_subscriber As CableServiceEnum() = Nothing
        ''' <summary>private container for <see cref="TrackingID"/> property</summary>
        Private m_trackingID As Integer = 0
        ''' <summary>private container for <see cref="MSOID"/> property</summary>
        Private m_mSOID As Integer = 0
        ''' <summary>private container for <see cref="AddressID"/> property</summary>
        Private m_addressID As String = ""
        ''' <summary>private container for <see cref="Name"/> property</summary>
        Private m_Name As String = ""
        ''' <summary>private container for <see cref="URL"/> property</summary>
        Private m_URL As String = ""
        ''' <summary>private container for <see cref="Phone"/> property</summary>
        Private m_Phone As String = ""
        ''' <summary>private container for <see cref="Language"/> property</summary>
        Private m_Language As String = ""

        Public ReadOnly Property Rules() As Rules
            Get
                Return m_rules
            End Get
        End Property
        Public ReadOnly Property ProductCatalog() As ProductCatalog
            Get
                Return m_productCatalog
            End Get
        End Property

        ''' <summary>Getter/Setter for queryOffersResubmitResult property</summary>
        Public Property queryOffersResubmitResult() As Result
            Get
                Return m_queryOffersResubmitResult
            End Get
            Set(ByVal value As Result)
                m_queryOffersResubmitResult = value
            End Set
        End Property

        ''' <summary>Getter/Setter for ItemsField property</summary>
        Public Property ItemsField() As List(Of OfferType)

            Get
                Return m_ItemsField
            End Get
            Set(ByVal value As List(Of OfferType))
                m_ItemsField = value
            End Set
        End Property

        ''' <summary>
        ''' The set of elements and attributes that comprise an explanation
        ''' for the consumer of the savings, if any, associated with the
        ''' purchase of multiple service offerings
        ''' <BR/>Attributes: DiscountID, OfferType, Frequency, Amount,
        ''' Description, OfferID
        ''' <BR/>Min/max occurs: 20
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Discount() As List(Of DiscountTypeQueryOffers)

            Get
                Return m_discount
            End Get
            Set(ByVal value As List(Of DiscountTypeQueryOffers))
                m_discount = value
            End Set
        End Property

        ''' <summary>Subscriber  <BR/>
        '''Contains information from the MSO regarding cable services the customer already has. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-10 
        '''<BR/>enumeration: CableHighSpeedData, CableBasicVideo, CableDigitalVideo, CableHDVideo, CableDVR, CableVoice, CableHomeNetwork, CableWirelessVoice
        ''' </summary>
        Public Property subscriber() As CableServiceEnum()
            Get
                Return m_subscriber
            End Get
            Set(ByVal value As CableServiceEnum())
                m_subscriber = value
            End Set
        End Property

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
            Set(ByVal value As Integer)
                m_trackingID = value
            End Set
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
            Set(ByVal value As Integer)
                m_mSOID = value
            End Set
        End Property

        ''' <summary>AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. </summary>
        Public Property AddressID() As String
            Get
                Return m_addressID
            End Get
            Set(ByVal value As String)
                m_addressID = value
            End Set
        End Property

        ''' <summary>
        ''' Name <BR/>
        '''<BR/>The Name attribute is used two ways. In a Response element, Name is the title of the MSO. Name is also used in a service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        Public Property Name() As String
            Get
                Return m_Name
            End Get
            Set(ByVal value As String)
                m_Name = value
            End Set
        End Property

        ''' <summary>URL  <BR/>
        '''The MSO's marketing information web address. 
        '''<BR/>use: Optional 
        '''<BR/>data type: anyURl </summary>
        Public Property URL() As String
            Get
                Return m_URL
            End Get
            Set(ByVal value As String)
                m_URL = value
            End Set
        End Property

        ''' <summary>Phone <BR/>
        '''The MSO's consumer service telephone number. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>format: \d{10}
        ''' </summary>
        Public Property Phone() As String
            Get
                Return m_Phone
            End Get
            Set(ByVal value As String)
                m_Phone = value
            End Set
        End Property

        ''' <summary>
        '''Language <BR/>
        '''G2B uses both a Language attribute and a Language element. 
        '''As an element, Language specifies the consumer's preference for the Response message. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Language 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>This element is assumed to be en-us, unless otherwise specified. The content of this tag must follow IETF RFC 3066. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Language() As String
            Get
                Return m_Language
            End Get
            Set(ByVal value As String)
                m_Language = value
            End Set
        End Property

        Public Sub New(ByVal productCatalog As ProductCatalog, ByVal rules As Rules)
            Me.m_productCatalog = productCatalog
            Me.m_rules = rules
        End Sub

        Public Sub New(ByVal productCatalog As ProductCatalog, ByVal rules As Rules, _
            ByVal pobjqueryOffersResubmitResult As Result, _
            ByVal pobjItemsField As List(Of OfferType), _
            ByVal pobjDiscount As List(Of DiscountTypeQueryOffers), _
            ByVal pobjsubscriber As CableServiceEnum(), _
            ByVal pintTrackingID As Integer, ByVal pintMSOID As Integer, _
            ByVal pstrAddressID As String, ByVal pstrName As String, _
            ByVal pstrURL As String, ByVal pstrPhone As String, _
            ByVal pstrLanguage As String)

            Me.m_productCatalog = productCatalog
            Me.m_rules = rules
            Me.m_queryOffersResubmitResult = pobjqueryOffersResubmitResult
            Me.m_ItemsField = pobjItemsField
            Me.m_discount = pobjDiscount
            Me.m_subscriber = pobjsubscriber
            Me.m_trackingID = pintTrackingID
            Me.m_mSOID = pintMSOID
            Me.m_addressID = pstrAddressID
            Me.m_Name = pstrName
            Me.m_URL = pstrURL
            Me.m_Phone = pstrPhone
            Me.m_Language = pstrLanguage
        End Sub

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub

        Public Overrides Function ToString() As String
            Dim sb As New StringBuilder(1000)
            Dim t As Type
            Dim pi As PropertyInfo
            'sb.Append("<BR/>" + "Tracking ID " & Me.m_trackingID)
            'sb.Append("<BR/>" + "MSO ID " & Me.m_mSOID)

            Try
                t = Me.GetType()
                For Each mi As System.Reflection.PropertyInfo In t.GetProperties()
                    ' see if we have a plain property or if the property is 
                    ' a dictionary.  can't do "toString()" on a dictionary
                    ' object
                    pi = Me.GetType().GetProperty(mi.Name)

                    If ((pi.PropertyType.IsPrimitive OrElse pi.PropertyType.Name = "String") _
                      AndAlso _
                        pi.PropertyType.ToString().IndexOf("Dictionary") = -1) _
                      AndAlso _
                      ((pi.PropertyType.ToString().IndexOf("ProductCatalog") = -1) _
                        AndAlso _
                        (pi.PropertyType.ToString().IndexOf("Rules") = -1) _
                        AndAlso _
                        (pi.PropertyType.ToString().IndexOf("OfferType") = -1) _
                        AndAlso _
                        (pi.PropertyType.ToString().IndexOf("Discount") = -1)) Then
                        sb.Append("<BR/>&nbsp;&nbsp;&nbsp;" & _
                                mi.Name & " (<i>" & pi.PropertyType.Name & "</i>) : " & _
                                pi.GetValue(Me, Nothing))
                    End If
                Next mi


                sb.Append("<BR/><H2>Bundles</H2>")
                ' show all bundles
                For Each kvp As KeyValuePair(Of String, Bundle) In Me.m_productCatalog.Bundles
                    sb.Append(kvp.ToString())
                Next kvp

                sb.Append("<BR/><H2>Service Plans</H2>")
                ' show all service plans
                For Each kvp As KeyValuePair(Of String, ServicePlan) In Me.m_productCatalog.ServicePlans
                    sb.Append(kvp.ToString())
                Next kvp

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try

        End Function

    End Class

    ''' <summary>
    '''MSOOffersResponse <BR/>
    '''The set of elements that comprise an MSO's answer, to G2B, to a query for available services. 
    ''' <BR/>Attributes: MSOID, Name, URL, Phone, Language, AddressID, NumberPortable 
    ''' <BR/>Elements: 
    '''MSOOffersResult, AddressSuggestion, DataOffer, VideoOffer, VoiceOffer, WirelessVoiceOffer, BundledOffer, Discount, Subscriber, CustomerAuthFieldDefinition 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-20
    ''' </summary>
    ''' <remarks>
    '''An MSOOffersResponse element will be returned for each MSO that G2B finds for an Address. Up to 20 are allowed, but - in most cases - there will be no more than two or three. 
    ''' </remarks>
    <Serializable()> _
    <DebuggerDisplay("MSOOffersResponseType: {_itemsField.Count} Offers")> _
Public Class MSOOffersResponseType

        Private m_mSOOffersResultField As Result
        Private m_addressSuggestionField() As USAddressSuggestionType
        Private m_itemsField() As OfferType
        Private m_discountField() As DiscountTypeQueryOffers
        Private m_mSOIDField As Integer
        Private m_nameField As String
        Private m_uRLField As String
        Private m_phoneField As String
        Private m_languageField As String
        Private m_addressIDField As String

        ' 8/2007 jwg added for g2b 4.1
        Private m_vnumberPortableField As Boolean
        Private m_numberPortableFieldSpecified As Boolean
        Private m_customerAuthField As CustomerAuthFieldDefinitionType

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>MSOOffersResponseType")

                sb.Append("<BR/>Name: " & Utility.DefaultString(m_nameField))
                sb.Append("<BR/>URL: " & Utility.DefaultString(m_uRLField))
                sb.Append("<BR/>phone: " & Utility.DefaultString(m_phoneField))
                sb.Append("<BR/>language: " & Utility.DefaultString(m_languageField))
                sb.Append("<BR/>addressid: " & Utility.DefaultString(m_addressIDField))

                sb.Append("<BR/>MSOID: " & MSOID.ToString())

                If m_addressSuggestionField IsNot Nothing Then
                    For iItem As Integer = 0 To m_addressSuggestionField.Length - 1
                        sb.Append("<BR/>addressSuggestion : " & m_addressSuggestionField(iItem).ToString())
                    Next
                End If

                If m_itemsField IsNot Nothing Then
                    For iItem As Integer = 0 To m_itemsField.Length - 1
                        sb.Append("<BR/>items : " & m_itemsField(iItem).ToString())
                    Next
                End If

                If m_discountField IsNot Nothing Then
                    For iItem As Integer = 0 To m_discountField.Length - 1
                        sb.Append("<BR/>discount : " & m_discountField(iItem).ToString())
                    Next
                End If

                If (m_mSOOffersResultField IsNot Nothing) Then
                    sb.Append("<BR/>Result: " & m_mSOOffersResultField.ToString())
                End If

                If (Me.m_customerAuthField IsNot Nothing) Then
                    sb.Append("<BR/>Result: " & Me.m_customerAuthField.ToString())
                End If

                sb.Append("<BR/>Number Portable : " & m_vnumberPortableField.ToString())
                sb.Append("<BR/>Number Portable Specified : " & m_numberPortableFieldSpecified.ToString())

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        Public Sub New(ByVal mSOOffersResult As Result, _
                    ByVal addressSuggestion() As USAddressSuggestionType, _
                    ByVal items() As OfferType, _
                    ByVal discount() As DiscountTypeQueryOffers, _
                    ByVal mSOID As Integer, _
                    ByVal name As String, _
                    ByVal uRL As String, _
                    ByVal phone As String, _
                    ByVal language As String, _
                    ByVal addressID As String)
            Me.MSOOffersResult = mSOOffersResult
            Me.AddressSuggestion = addressSuggestion
            Me.Items = items
            Me.Discount = discount
            Me.MSOID = mSOID
            Me.Name = name
            Me.URL = uRL
            Me.Phone = phone
            Me.Language = language
            Me.AddressID = addressID
        End Sub
        Public Sub New(ByVal mSOOffersResult As Result, _
                    ByVal addressSuggestion() As USAddressSuggestionType, _
                    ByVal items() As OfferType, _
                    ByVal discount() As DiscountTypeQueryOffers, _
                    ByVal mSOID As Integer, _
                    ByVal name As String, _
                    ByVal uRL As String, _
                    ByVal phone As String, _
                    ByVal language As String, _
                    ByVal addressID As String, _
                    ByVal pblnnumberPortable As Boolean, _
                    ByVal pblnNumberPortableSpecified As Boolean, _
                    ByVal pobjCustAuth As CustomerAuthFieldDefinitionType)
            Me.new(mSOOffersResult, _
                    addressSuggestion, _
                    items, _
                    discount, _
                    mSOID, _
                    name, _
                    uRL, _
                    phone, _
                    language, _
                    addressID)
            Me.m_vnumberPortableField = pblnnumberPortable
            Me.m_numberPortableFieldSpecified = pblnNumberPortableSpecified
            Me.m_customerAuthField = pobjCustAuth

        End Sub

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
            MyBase.New()
            Me.m_languageField = "en-us"
        End Sub

        ''' <summary>
        '''NumberPortable <BR/>
        '''The response fro the MSO that indicates if the consumer's wireless phone number can be ported to another service provider. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 0-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property NumberPortable() As Boolean
            Get
                Return Me.m_vnumberPortableField
            End Get
            Set(ByVal value As Boolean)
                m_vnumberPortableField = value
            End Set
        End Property

        Public Property NumberPortableSpecified() As Boolean
            Get
                Return Me.m_numberPortableFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_numberPortableFieldSpecified = value
            End Set
        End Property

        ''' <summary>
        ''' A collection of data items that allows MSOs to tell Affiliates
        ''' what data items they must collect from the consumer in order to
        ''' provide Authentication.<BR/>
        ''' Sub Elements: NewCustomer, ExistingCustomer<BR/>
        ''' use: optional<BR/>
        ''' min/max occurs: 0-1<BR/>
        ''' </summary>
        ''' <remarks></remarks>
        Public Property CustomerAuth() As CustomerAuthFieldDefinitionType
            Get
                Return Me.m_customerAuthField
            End Get
            Set(ByVal value As CustomerAuthFieldDefinitionType)
                Me.m_customerAuthField = value
            End Set
        End Property
        ''' <summary>
        '''MSOOffersResult 
        '''The numeric Code and any text describing a status or an exception condition. See "Appendix A - Status Codes and Exceptions" on page 47 for more information. 
        ''' <BR/>Attributes: Code 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 0-200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MSOOffersResult() As Result
            Get
                Return Me.m_mSOOffersResultField
            End Get
            Set(ByVal value As Result)
                Me.m_mSOOffersResultField = value
            End Set
        End Property

        ''' <summary>
        '''AddressSuggestion 
        '''If the MSO cannot find an exact match for the entered address in their system, but has found 
        '''one or more addresses that may be a match, those possible matches are returned in this element. 
        ''' 
        ''' <BR/>Elements: 
        '''AddressLine, Suite, City, State, Zip, Zip4 
        ''' <BR/>Attributes: AddressID 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-100
        '''
        '''Support for Address Suggestions is  optional for the MSO and Affiliate. If 
        '''supported, the Affiliate should use the information in this element to get 
        '''clarification from the consumer. The Affiliate may return any 
        '''AddressSuggestion using the QueryOffersResubmit service. 
        '''Affiliates will need to decide how to handle display of more than 10 
        '''Address Suggestions to the consumer. 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property AddressSuggestion() As USAddressSuggestionType()
            Get
                Return Me.m_addressSuggestionField
            End Get
            Set(ByVal value As USAddressSuggestionType())
                Me.m_addressSuggestionField = value
            End Set
        End Property

        ''' <summary>
        ''' Offers returned by the call to Query Offers
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Items() As OfferType()
            Get
                Return Me.m_itemsField
            End Get
            Set(ByVal value As OfferType())
                Me.m_itemsField = value
            End Set
        End Property

        ''' <summary>
        ''' The set of elements and attributes that comprise an explanation
        ''' for the consumer of the savings, if any, associated with the
        ''' purchase of multiple service offerings
        ''' <BR/>Attributes: DiscountID, OfferType, Frequency, Amount,
        ''' Description, OfferID
        ''' <BR/>Min/max occurs: 20
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Discount() As DiscountTypeQueryOffers()
            Get
                Return Me.m_discountField
            End Get
            Set(ByVal value As DiscountTypeQueryOffers())
                Me.m_discountField = value
            End Set
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MSOID() As Integer
            Get
                Return Me.m_mSOIDField
            End Get
            Set(ByVal value As Integer)
                Me.m_mSOIDField = value
            End Set
        End Property

        ''' <summary>
        '''Name 
        '''<BR/>use: Optional <BR/>data type: n/a <BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: n/a
        '''<BR/>The Name attribute is used two ways. In a service offer, Name is the title: 
        '''- Or short description for the consumer of a Promotion; <BR/>
        '''- Of a Customization; <BR/>
        '''- A choice provided in a Customization; <BR/>
        '''or 
        '''- For a list of items included in the base price of a service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-50
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name() As String
            Get
                Return Me.m_nameField
            End Get
            Set(ByVal value As String)
                Me.m_nameField = value
            End Set
        End Property

        ''' <summary>
        ''' URL of the web service used to call Query Offers
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property URL() As String
            Get
                Return Me.m_uRLField
            End Get
            Set(ByVal value As String)
                Me.m_uRLField = value
            End Set
        End Property
        ''' <summary>Phone <BR/>
        '''The MSO's consumer service telephone number. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>format: \d{10}
        ''' </summary>
        Public Property Phone() As String
            Get
                Return Me.m_phoneField
            End Get
            Set(ByVal value As String)
                Me.m_phoneField = value
            End Set
        End Property

        ''' <summary>
        '''Language <BR/>
        '''G2B uses both a Language attribute and a Language element. As an attribute, Language specifies the 
        '''language in which the Response message is sent. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Language 
        '''<BR/>This attribute is assumed to be en-us, unless otherwise specified. The content of this tag must follow IETF RFC 3066. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Language() As String
            Get
                Return Me.m_languageField
            End Get
            Set(ByVal value As String)
                Me.m_languageField = value
            End Set
        End Property

        ''' <summary>
        ''' AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AddressID() As String
            Get
                Return Me.m_addressIDField
            End Get
            Set(ByVal value As String)
                Me.m_addressIDField = value
            End Set
        End Property

    End Class

    ''' <summary>
    '''BundledOffer  <BR/>
    '''The set of elements that comprise a bundled service offer. 
    ''' <BR/>Elements: ShortName, MediumName, LongName, Price, Install Price, 
    ''' HardwarePrice, DepositPrice, Promotion, QualifiedHardware, Customization, 
    ''' IncludedItems, MarketingInfo, Contract, TechSupport, Disclaimer, TermsAndCondition, 
    ''' DataExtension, VideoExtension, VoiceExtension, WirelessVoiceExtension 
    ''' <BR/>Attributes: OfferID, Version, MovesOffer 
    '''<BR/>use: Required if presenting a bundled service offer. 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' <BR/>
    '''MSOs should not use BundledOffer to define single service offers. 
    '''Because BundledOffers cannot be consumed by Affiliates using v3.0, G2B will not forward them to those 
    '''Affiliates. 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("BundledOfferType: ID={mybase.OfferID }")> _
    Public Class BundledOfferType
        Inherits OfferType

        Private m_dataExtensionField As DataExtensionType
        Private m_videoExtensionField As VideoExtensionType
        Private m_voiceExtensionField As VoiceExtensionType
        Private m_wirelessVoiceExtensionField As WirelessVoiceExtensionType

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>BundledOfferType")
                If m_dataExtensionField IsNot Nothing Then
                    sb.Append(m_dataExtensionField.ToString())
                End If
                If m_videoExtensionField IsNot Nothing Then
                    sb.Append(m_videoExtensionField.ToString())
                End If
                If m_voiceExtensionField IsNot Nothing Then
                    sb.Append(m_voiceExtensionField.ToString())
                End If

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function
        ''' <summary>
        '''DataExtension  <BR/>
        '''The set of elements that comprise a data offer within a bundled service 
        '''offer. 
        ''' <BR/>Elements: UploadSpeed, DownloadSpeed, WebSpace, EMailAccounts,
        ''' dialupAccess, StaticIPAddresses, DynamicIPAddresses,Requirements
        ''' <BR/>Attributes: ServiceLineID 
        '''<BR/>use: Required if presenting a data offer as part of a 
        '''bundled service offer. 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property DataExtension() As DataExtensionType
            Get
                Return Me.m_dataExtensionField
            End Get
            Set(ByVal value As DataExtensionType)
                Me.m_dataExtensionField = value
            End Set
        End Property

        ''' <summary>
        '''VideoExtension  <BR/>
        '''The set of elements that comprise a video offer within a bundled service 
        '''offer. 
        ''' <BR/>Elements: Channels, PremiumChannels, Category, Requirements 
        ''' <BR/>Attributes: ServiceLineID 
        '''<BR/>use: Required if presenting a video offer as part of a 
        '''bundled service offer. 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property VideoExtension() As VideoExtensionType
            Get
                Return Me.m_videoExtensionField
            End Get
            Set(ByVal value As VideoExtensionType)
                Me.m_videoExtensionField = value
            End Set
        End Property

        ''' <summary>
        '''VoiceExtension  <BR/>
        '''The set of elements that comprise a voice offer within a bundled service offer. 
        ''' <BR/>Elements: LongDistanceMinutes, LongDistanceCharges, VoiceMailPrice, InternationalPrice, AdditionalLinePrice, IncludesCallerID, InlcudesCallWaiting, IncludesCallerIDWithCallWaiting, IncludesCallReturn, Includes3WayCalling, Requirements 
        ''' <BR/>Attributes: ServiceLineID 
        '''<BR/>use: Required if presenting a voice offer as part of a bundled service offer. 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property VoiceExtension() As VoiceExtensionType
            Get
                Return Me.m_voiceExtensionField
            End Get
            Set(ByVal value As VoiceExtensionType)
                Me.m_voiceExtensionField = value
            End Set
        End Property

        ''' <summary>
        '''WirelessVoiceExtension  <BR/>
        '''The set of elements that 
        '''comprise a wireless 
        '''voice offer within a 
        '''bundled service offer. 
        ''' <BR/>Elements: 
        '''AnytimeMinutes, OffPeakMinutes, WeekendMinutes, MobileMinutes, LongDistanceMinutes, PeakPeriod, RoamingCharge, VoiceMailPrice, IncludesCallerID, IncludesCallWaiting, IncludesCallerIDWithCallWaiting, InludesCallReturn, Includes3WayCalling, InternetAccess, TextMessaging, DirectoryAssistance, Requirements 
        ''' 
        ''' <BR/>Attributes: 
        '''ServiceLineID 
        '''<BR/>use: Required if presenting a wireless voice offer as part of a bundled service 
        '''offer 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property WirelessVoiceExtension() As WirelessVoiceExtensionType
            Get
                Return Me.m_wirelessVoiceExtensionField
            End Get
            Set(ByVal value As WirelessVoiceExtensionType)
                Me.m_wirelessVoiceExtensionField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''DataExtension  <BR/>
    '''The set of elements that comprise a data offer within a bundled service 
    '''offer. 
    ''' <BR/>Elements: UploadSpeed, DownloadSpeed, WebSpace, EMailAccounts,
    ''' dialupAccess, StaticIPAddresses, DynamicIPAddresses,Requirements
    ''' <BR/>Attributes: ServiceLineID 
    '''<BR/>use: Required if presenting a data offer as part of a 
    '''bundled service offer. 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("DataExtension: Upload={uploadSpeedField.ToString()}, download={downloadSpeedField.ToString()},  email={emailAccountsField.ToString()},  webspace={webspaceField.ToString()},  dialup={dialUpAccessField.ToString()},  Static IP={staticIPAddressesField.ToString()},  dynamic IP={dynamicIPAddressesField.ToString()},  Reqmts={requirementsField.ToString()},  Svc Line={serviceLineIDField}")> _
    Public Class DataExtensionType

        Private m_uploadSpeedField As DataSpeedType
        Private m_downloadSpeedField As DataSpeedType
        Private m_emailAccountsField As Integer
        Private m_webspaceField As DiskSpaceType
        Private m_dialUpAccessField As Boolean
        Private m_staticIPAddressesField As Integer
        Private m_dynamicIPAddressesField As Integer
        Private m_requirementsField As String
        Private m_serviceLineIDField As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)

            Try
                sb.Append("<BR/><B>DataExtension</B>:")
                If (m_uploadSpeedField IsNot Nothing) Then
                    sb.Append("<BR/>Upload Speed: " & m_uploadSpeedField.ToString())
                End If
                If (m_downloadSpeedField IsNot Nothing) Then
                    sb.Append("<BR/>Download Speed: " & m_downloadSpeedField.ToString())
                End If
                sb.Append("<BR/>email accounts: " & m_emailAccountsField.ToString())
                If (m_webspaceField IsNot Nothing) Then
                    sb.Append("<BR/>Web Space: " & m_webspaceField.ToString())
                End If
                sb.Append("<BR/>Dialup Access: " & DialUpAccess.ToString())
                sb.Append("<BR/>Static IP Addresses: " & m_staticIPAddressesField.ToString())

                sb.Append("<BR/>Dynamic IP Addresses: " & m_dynamicIPAddressesField.ToString())
                If (m_requirementsField IsNot Nothing) Then
                    sb.Append("<BR/>Requirements: " & m_requirementsField.ToString())
                End If
                If (m_serviceLineIDField IsNot Nothing) Then
                    sb.Append("<BR/>ServiceLineID: " & m_serviceLineIDField.ToString())
                End If
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''UploadSpeed  <BR/>
        '''With the associated Unit attribute, this specifies the data transfer speed from the consumer's premises. 
        ''' <BR/>Attributes: Unit 
        '''<BR/>use: Required 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property UploadSpeed() As DataSpeedType
            Get
                Return Me.m_uploadSpeedField
            End Get
            Set(ByVal value As DataSpeedType)
                Me.m_uploadSpeedField = value
            End Set
        End Property

        ''' <summary>
        '''DownloadSpeed  <BR/>
        '''With the associated Unit attribute, this specifies the data transfer speed to the consumer's premises. 
        ''' <BR/>Attributes: Unit 
        '''<BR/>use: Required 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DownloadSpeed() As DataSpeedType
            Get
                Return Me.m_downloadSpeedField
            End Get
            Set(ByVal value As DataSpeedType)
                Me.m_downloadSpeedField = value
            End Set
        End Property

        ''' <summary>
        '''EmailAccounts 
        '''The number of email accounts provided in a DataOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: integer 
        '''<BR/>min/max occurs: 1-1 
        '''
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  99
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property EmailAccounts() As Integer
            Get
                Return Me.m_emailAccountsField
            End Get
            Set(ByVal value As Integer)
                Me.m_emailAccountsField = value
            End Set
        End Property

        ''' <summary>
        '''Webspace  <BR/>
        '''The amount of personal web space available for a DataOffer. 
        ''' <BR/>Attributes: Unit 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''
        '''<BR/> maxInclusive:  999
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Webspace() As DiskSpaceType
            Get
                Return Me.m_webspaceField
            End Get
            Set(ByVal value As DiskSpaceType)
                Me.m_webspaceField = value
            End Set
        End Property

        ''' <summary>
        ''' Specifies if Dial-up access is provided with the cable high-speed DataOffer
        ''' <BR/>use: required
        ''' <BR/>data type: boolean
        ''' <BR/>min/max occurs: 1-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DialUpAccess() As Boolean
            Get
                Return Me.m_dialUpAccessField
            End Get
            Set(ByVal value As Boolean)
                Me.m_dialUpAccessField = value
            End Set
        End Property

        ''' <summary>
        '''StaticIPAddresses  <BR/>
        '''The number of static IP addresses provided with the DataOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  99
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property StaticIPAddresses() As Integer
            Get
                Return Me.m_staticIPAddressesField
            End Get
            Set(ByVal value As Integer)
                Me.m_staticIPAddressesField = value
            End Set
        End Property

        ''' <summary>
        ''' The number of static IP addresses provided with the DataOffer.
        ''' <BR/>use: Required
        ''' <BR/>data type: Integer
        ''' <BR/>min/max occurs: 1-1
        ''' <BR/>minInclusive: 0
        ''' <BR/>maxInclusive: 99
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DynamicIPAddresses() As Integer
            Get
                Return Me.m_dynamicIPAddressesField
            End Get
            Set(ByVal value As Integer)
                Me.m_dynamicIPAddressesField = value
            End Set
        End Property

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return Me.m_requirementsField
            End Get
            Set(ByVal value As String)
                Me.m_requirementsField = value
            End Set
        End Property

        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return Me.m_serviceLineIDField
            End Get
            Set(ByVal value As String)
                Me.m_serviceLineIDField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''VideoExtension  <BR/>
    '''The set of elements that comprise a video offer within a bundled service 
    '''offer. 
    ''' <BR/>Elements: Channels, PremiumChannels, Category, Requirements 
    ''' <BR/>Attributes: ServiceLineID 
    '''<BR/>use: Required if presenting a video offer as part of a 
    '''bundled service offer. 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("VideoExtension: {channelsfield.Channel.Length} channels, {premiumChannelsfield.Channel.Length } premium channels")> _
    Public Class VideoExtensionType

        Private m_channelsField As ChannelsType
        Private m_premiumChannelsField As ChannelsType
        Private m_categoryField As VideoCategoryEnum
        Private m_serviceLineIDField As String
        ' 8/2007 jwg added for g2b 4.1
        Private m_requirementsField As String = String.Empty

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(100)
            Try
                sb.Append("<BR/><B>Video Extension</B>")

                If (m_serviceLineIDField IsNot Nothing) Then
                    sb.Append("<BR/>Service line ID: " & m_serviceLineIDField)
                End If

                sb.Append("<BR/>Category Field: " & m_categoryField.ToString())
                sb.Append("<BR/>Requirements: " & Utility.DefaultString(m_requirementsField))

                If (m_channelsField IsNot Nothing) Then
                    sb.Append("<BR/>Channels : " & m_channelsField.ToString())
                End If

                If (m_premiumChannelsField IsNot Nothing) Then
                    sb.Append("<BR/>Premium Channels: " & m_premiumChannelsField.ToString())
                End If
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return Me.m_requirementsField
            End Get
            Set(ByVal value As String)
                Me.m_requirementsField = value
            End Set
        End Property

        ''' <summary>
        '''Channels <BR/> 
        '''A set of elements that provides information about the channels included in a VideoOffer. 
        ''' <BR/>Elements: Channel 
        ''' <BR/>Attributes: Number 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Channels() As ChannelsType
            Get
                Return Me.m_channelsField
            End Get
            Set(ByVal value As ChannelsType)
                Me.m_channelsField = value
            End Set
        End Property

        ''' <summary>
        '''PremiumChannels <BR/>
        '''A set of elements listing the premium channels in the VideoOffer. 
        ''' <BR/>Elements: Channel 
        ''' <BR/>Attributes: Number 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PremiumChannels() As ChannelsType
            Get
                Return Me.m_premiumChannelsField
            End Get
            Set(ByVal value As ChannelsType)
                Me.m_premiumChannelsField = value
            End Set
        End Property

        ''' <summary>
        '''Category  <BR/>
        '''G2B uses a Category element and two Category attributes. 
        '''As an element, Category indicates the type of video service in a VideoOffer. 
        ''' 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''enumeration: 'Basic', 'Digital', 'HDDigital', 'HDUpgrade', 'DVRDigital', 'HDDVRDigital', 'DVRUpgrade', 'HDDVRUpgrade' 
        ''' 
        '''The Affiliate Site should not display this element to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Category() As VideoCategoryEnum
            Get
                Return Me.m_categoryField
            End Get
            Set(ByVal value As VideoCategoryEnum)
                Me.m_categoryField = value
            End Set
        End Property

        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return Me.m_serviceLineIDField
            End Get
            Set(ByVal value As String)
                Me.m_serviceLineIDField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''VoiceExtension  <BR/>
    '''The set of elements that comprise a voice offer within a bundled service offer. 
    ''' <BR/>Elements: LongDistanceMinutes, LongDistanceCharges, VoiceMailPrice, InternationalPrice, AdditionalLinePrice, IncludesCallerID, InlcudesCallWaiting, IncludesCallerIDWithCallWaiting, IncludesCallReturn, Includes3WayCalling, Requirements 
    ''' <BR/>Attributes: ServiceLineID 
    '''<BR/>use: Required if presenting a voice offer as part of a bundled service offer. 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class VoiceExtensionType

        Private m_longDistanceMinutesField As String
        Private m_longDistanceChargesField As Decimal
        Private m_voiceMailPriceField As PriceType
        Private m_internationalPriceField As PriceType
        Private m_additionalLinePriceField As PriceType
        Private m_includesCallerIDField As Boolean
        Private m_includesCallWaitingField As Boolean
        Private m_includesCallerIDWithCallWaitingField As Boolean
        Private m_includesCallReturnField As Boolean
        Private m_includes3WayCallingField As Boolean
        Private m_serviceLineIDField As String

        ' 8/2007 jwg added for g2b 4.1
        Private m_requirementsField As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(100)
            Try
                sb.Append("<BR/><B>Voice Extension</B>")

                If m_longDistanceMinutesField IsNot Nothing Then
                    sb.Append("<BR/>Long Distance Minutes " & m_longDistanceMinutesField)
                End If

                sb.Append("<BR/>Long Distance Charges: " & m_longDistanceChargesField.ToString())

                If (m_voiceMailPriceField IsNot Nothing) Then
                    sb.Append("<BR/>Voice mail price: " & m_voiceMailPriceField.ToString())
                End If

                If (m_additionalLinePriceField IsNot Nothing) Then
                    sb.Append("<BR/>Additional Line price: " & m_additionalLinePriceField.ToString())
                End If

                If (m_internationalPriceField IsNot Nothing) Then
                    sb.Append("<BR/>International price: " & m_internationalPriceField.ToString())
                End If

                sb.Append("<BR/>Requirements: " & Utility.DefaultString(Me.m_requirementsField))
                sb.Append("<BR/>Includes Caller ID " & IncludesCallerID.ToString())
                sb.Append("<BR/>Includes Call Waiting " & IncludesCallWaiting.ToString())
                sb.Append("<BR/>Includes Caller ID with Call Waiting " & IncludesCallerIDWithCallWaiting.ToString())
                sb.Append("<BR/>Includes Call Return " & m_includesCallReturnField.ToString())
                sb.Append("<BR/>Includes 3way calling " & m_includes3WayCallingField.ToString())

                If (ServiceLineID IsNot Nothing) Then
                    sb.Append("<BR/>Service Line ID : " & ServiceLineID.ToString())
                End If

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        ''' LongDistanceMinutes <BR/>
        '''Specifies the total time, in minutes, of long distance telephone calls included in the base price of the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''<BR/>enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LongDistanceMinutes() As String
            Get
                Return Me.m_longDistanceMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_longDistanceMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''LongDistanceCharges <BR/>
        '''Used to specify a charge (monthly or per minute) for long distance calls. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LongDistanceCharges() As Decimal
            Get
                Return Me.m_longDistanceChargesField
            End Get
            Set(ByVal value As Decimal)
                Me.m_longDistanceChargesField = value
            End Set
        End Property

        ''' <summary>
        '''VoiceMailPrice  <BR/>
        '''The dollar amount charged for voicemail in a VoiceOffer. There is an associated Frequency attribute that 
        '''specifies how often the VoiceMailPrice is incurred. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property VoiceMailPrice() As PriceType
            Get
                Return Me.m_voiceMailPriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_voiceMailPriceField = value
            End Set
        End Property

        ''' <summary>
        '''InternationalPrice <BR/>
        '''Specifies the dollar amount a consumer will be charged, per month, for access to international calling service. 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        '''<BR/>In addition to the access fee, a per-minute usage cost may be charged. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InternationalPrice() As PriceType
            Get
                Return Me.m_internationalPriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_internationalPriceField = value
            End Set
        End Property

        ''' <summary>
        '''AdditionalLinePrice  <BR/>
        '''The dollar amount charged to include a second and subsequent telephone number in a VoiceOffer. 
        ''' <BR/>Attributes: Frequency, 
        '''Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        '''<BR/>
        '''The G2B spec assumes the base price in a VoiceOffer includes one telephone number. 
        ''' </summary>
        Public Property AdditionalLinePrice() As PriceType
            Get
                Return Me.m_additionalLinePriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_additionalLinePriceField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerID() As Boolean
            Get
                Return Me.m_includesCallerIDField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if Call Waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallWaiting() As Boolean
            Get
                Return Me.m_includesCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID with Call Waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerIDWithCallWaiting() As Boolean
            Get
                Return Me.m_includesCallerIDWithCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDWithCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if last call return is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallReturn() As Boolean
            Get
                Return Me.m_includesCallReturnField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallReturnField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if three-way calling is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Includes3WayCalling() As Boolean
            Get
                Return Me.m_includes3WayCallingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includes3WayCallingField = value
            End Set
        End Property

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return Me.m_requirementsField
            End Get
            Set(ByVal value As String)
                m_requirementsField = value
            End Set
        End Property

        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return Me.m_serviceLineIDField
            End Get
            Set(ByVal value As String)
                Me.m_serviceLineIDField = value
            End Set
        End Property

    End Class

    ''' <summary>
    '''WirelessVoiceExtension  <BR/>
    '''The set of elements that 
    '''comprise a wireless 
    '''voice offer within a 
    '''bundled service offer. 
    ''' <BR/>Elements: 
    '''AnytimeMinutes, OffPeakMinutes, WeekendMinutes, MobileMinutes, LongDistanceMinutes, PeakPeriod, RoamingCharge, VoiceMailPrice, IncludesCallerID, IncludesCallWaiting, IncludesCallerIDWithCallWaiting, InludesCallReturn, Includes3WayCalling, InternetAccess, TextMessaging, DirectoryAssistance, Requirements 
    ''' 
    ''' <BR/>Attributes: 
    '''ServiceLineID 
    '''<BR/>use: Required if presenting a wireless voice offer as part of a bundled service 
    '''offer 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class WirelessVoiceExtensionType

        Private m_anytimeMinutesField As String
        Private m_offPeakMinutesField As String
        Private m_weekendMinutesField As String
        Private m_mobileMinutesField As String
        Private m_longDistanceMinutesField As String
        Private m_peakPeriodField As String
        Private m_additionalMinutesField As Decimal
        Private m_roamingChargeField As Decimal
        Private m_voiceMailPriceField As PriceType
        Private m_includesCallerIDField As Boolean
        Private m_includesCallWaitingField As Boolean
        Private m_includesCallerIDWithCallWaitingField As Boolean
        Private m_includesCallReturnField As Boolean
        Private m_includes3WayCallingField As Boolean
        Private m_internetAccessField As DetailType
        Private m_textMessagingField As DetailType
        Private m_directoryAssistanceField As DetailType
        ' 8/2007 jwg added for 4.1
        Private m_serviceLineIDField As String

        ''' <summary>
        '''AnytimeMinutes <BR/>
        '''Specifies the total time, in minutes, a consumer may spend making 
        '''mobile telephone calls before AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union (Int , String) 
        '''<BR/>min/max occurs: 1-1 
        '''minInclusive: 0 
        '''maxInclusive: 9999 
        '''enumeration: 
        '''Unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AnytimeMinutes() As String
            Get
                Return Me.m_anytimeMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_anytimeMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''OffPeakMinutes <BR/>
        '''Specifies the total time, in minutes, a consumer may spend making wireless telephone calls during off-peak hours before 
        '''AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-10 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''<BR/>enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OffPeakMinutes() As String
            Get
                Return Me.m_offPeakMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_offPeakMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''WeekendMinutes <BR/>
        '''Specifies the total time, in minutes, a consumer may spend making using their wireless 
        '''telephone on the weekend before AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property WeekendMinutes() As String
            Get
                Return Me.m_weekendMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_weekendMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''MobileMinutes 
        '''Specifies the total time, in minutes, a consumer may spend using their wireless telephone speaking to consumers with the same carrier (i.e., mobile-to-mobile) before AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''<BR/>enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MobileMinutes() As String
            Get
                Return Me.m_mobileMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_mobileMinutesField = value
            End Set
        End Property

        Public Property LongDistanceMinutes() As String
            Get
                Return Me.m_longDistanceMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_longDistanceMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''PeakPeriod <BR/>
        '''Describes the days of the week and the hour range for the PeakPeriod. For example, M - F 7:00 a.m. - 8:59 p.m. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-100 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PeakPeriod() As String
            Get
                Return Me.m_peakPeriodField
            End Get
            Set(ByVal value As String)
                Me.m_peakPeriodField = value
            End Set
        End Property

        ''' <summary>
        '''AdditionalMinutes <BR/>
        '''The dollar amount charged for telephony minutes expended over and above other calling 
        '''feature values (Anytime Minutes, MobileMinutes, OffPeakMinutes, or WeekendMinutes) in a 
        '''WirelessVoiceOffer. 
        ''' 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        Public Property AdditionalMinutes() As Decimal
            Get
                Return Me.m_additionalMinutesField
            End Get
            Set(ByVal value As Decimal)
                Me.m_additionalMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''RoamingCharge <BR/>
        '''The dollar amount charged, per minute, for transferring a consumer's wireless telephone call from the 
        '''provider company's cell system to a neighboring company's cell system. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property RoamingCharge() As Decimal
            Get
                Return Me.m_roamingChargeField
            End Get
            Set(ByVal value As Decimal)
                Me.m_roamingChargeField = value
            End Set
        End Property

        ''' <summary>
        '''VoiceMailPrice  <BR/>
        '''The dollar amount charged for voicemail in a VoiceOffer. There is an associated Frequency attribute that 
        '''specifies how often the VoiceMailPrice is incurred. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property VoiceMailPrice() As PriceType
            Get
                Return Me.m_voiceMailPriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_voiceMailPriceField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerID() As Boolean
            Get
                Return Me.m_includesCallerIDField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallWaiting() As Boolean
            Get
                Return Me.m_includesCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID with call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerIDWithCallWaiting() As Boolean
            Get
                Return Me.m_includesCallerIDWithCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDWithCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if last call return is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallReturn() As Boolean
            Get
                Return Me.m_includesCallReturnField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallReturnField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if three-way calling is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Includes3WayCalling() As Boolean
            Get
                Return Me.m_includes3WayCallingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includes3WayCallingField = value
            End Set
        End Property

        ''' <summary>
        '''InternetAccess <BR/>
        '''Describes the online accessibility feature of a WirelessVoiceOffer. An associated Included 
        '''attribute specifies whether InternetAccess is included in the base price of a WirelessVoiceOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''max length: 200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InternetAccess() As DetailType
            Get
                Return Me.m_internetAccessField
            End Get
            Set(ByVal value As DetailType)
                Me.m_internetAccessField = value
            End Set
        End Property
        ''' <summary>
        '''TextMessaging  <BR/>
        '''Describes the type of text messaging is included in the service offer. An associated Included attribute 
        '''specifies whether TextMessaging is included in the base price of a WirelessVoiceOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TextMessaging() As DetailType
            Get
                Return Me.m_textMessagingField
            End Get
            Set(ByVal value As DetailType)
                Me.m_textMessagingField = value
            End Set
        End Property

        ''' <summary>
        ''' Describes the type of directory assistance offered in the WirelessVoiceOffer. An associated Included attribute specifies whether DirectoryAssistance is included in the base price of a WirelessVoiceOffer
        ''' <BR/>use: required
        ''' <BR/>data type: string
        ''' <BR/>min/max occurs: 1-1
        ''' <BR/>max length: 200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DirectoryAssistance() As DetailType
            Get
                Return Me.m_directoryAssistanceField
            End Get
            Set(ByVal value As DetailType)
                Me.m_directoryAssistanceField = value
            End Set
        End Property

        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return Me.m_serviceLineIDField
            End Get
            Set(ByVal value As String)
                Me.m_serviceLineIDField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''VideoOffer  <BR/>
    '''The set of elements that comprise a service offer for video. 
    ''' <BR/>Elements: ShortNAme, MediumName, LongName, Price, InstallPrice, HardwarePrice, DepositPrice, Promotion, QualifiedHardware, Customization, IncludedItems, MarketingInfo, Contract, TechSupport, Disclaimer, TermsAndConditions, Channels, PremiumChannels, Category, Requirements 
    ''' <BR/>Attributes: OfferID, Version, MovesOffer 
    '''<BR/>use: Required if 
    '''presenting a video 
    '''service offer 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' <BR/>In the Response message, each MSO may return unlimited offers. Each of the unlimited offers must 
    '''include only one Offer element (i.e., DataOffer, VideoOffer, VoiceOffer, or WirelessVoiceOffer). 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Video Offer Type: id={OfferID} , short name {ShortName} Requirements {Requirements}")> _
    Public Class VideoOfferType
        Inherits OfferType

        Private m_channelsField As ChannelsType
        Private m_premiumChannelsField As ChannelsType
        Private m_categoryField As VideoCategoryEnum
        ' 8/2007 jwg added for g2b 4.1
        Private m_requirementsField As String

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Video Offer Type")
                If (m_channelsField IsNot Nothing) Then
                    sb.Append("<BR/>Channels: " & m_channelsField.ToString())
                End If
                If (m_premiumChannelsField IsNot Nothing) Then
                    sb.Append("<BR/>Premium Channels: " & m_premiumChannelsField.ToString())
                End If
                sb.Append("<BR/>Category : " & m_categoryField.ToString())
                sb.Append("<BR/>Requirements: " & Utility.DefaultString(m_requirementsField))

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''Channels <BR/> 
        '''A set of elements that provides information about the channels included in a VideoOffer. 
        ''' <BR/>Elements: Channel 
        ''' <BR/>Attributes: Number 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Channels() As ChannelsType
            Get
                Return Me.m_channelsField
            End Get
            Set(ByVal value As ChannelsType)
                Me.m_channelsField = value
            End Set
        End Property

        ''' <summary>
        '''Channels <BR/> 
        '''A set of elements lisdting the premium channels included in a VideoOffer. 
        ''' <BR/>Elements: Channel 
        ''' <BR/>Attributes: Number 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PremiumChannels() As ChannelsType
            Get
                Return Me.m_premiumChannelsField
            End Get
            Set(ByVal value As ChannelsType)
                Me.m_premiumChannelsField = value
            End Set
        End Property

        ''' <summary>
        '''Category  <BR/>
        '''G2B uses a Category element and two Category attributes. 
        '''As an element, Category indicates the type of video service in a VideoOffer. 
        ''' 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''enumeration: 'Basic', 'Digital', 'HDDigital', 'HDUpgrade', 'DVRDigital', 'HDDVRDigital', 'DVRUpgrade', 'HDDVRUpgrade' 
        ''' 
        '''The Affiliate Site should not display this element to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Category() As VideoCategoryEnum
            Get
                Return Me.m_categoryField
            End Get
            Set(ByVal value As VideoCategoryEnum)
                Me.m_categoryField = value
            End Set
        End Property

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return m_requirementsField
            End Get
            Set(ByVal value As String)
                m_requirementsField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''WirelessVoiceOffer <BR/>
    '''The set of elements that 
    '''comprise a service offer 
    '''for wireless telephone 
    '''service. 
    ''' <BR/>Elements: ShortName, MediumName, LongName, Price, InstallPrice, HardwarePrice, DepositPrice, Promotion, QualifiedHardware, Customization, IncludedItems, MarketingInfo, Contract, TechSupport, Disclaimer, TermsAndConditions, AnytimeMinutes, OffPeakMinutes, WeekendMinutes, MobileMinutes, LongDistanceMinutes, PeakPeriod, AdditionalMinutes, RoamingCharge, VoiceMailPrice, IncludesCallerID, IncludesCallWaiting, IncludesCallerIDWithCallWaiting, IncludesCallReturn, Includes3WayCalling, InternetAccess, TextMessaging, DirectoryAssistance, Requirements 
    ''' <BR/>Attributes: OfferID, Version, MovesOffer 
    '''<BR/>use: Required if presenting a wireless voice service offer 
    ''' <BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    '''<BR/>
    '''In the Response message, each MSO may return unlimited offers. 
    '''Each of the unlimited offers must include only one Offer element (i.e., DataOffer, VideoOffer, VoiceOffer, or WirelessVoiceOffer). 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Public Class WirelessVoiceOfferType
        Inherits OfferType

        Private m_anytimeMinutesField As String
        Private m_offPeakMinutesField As String
        Private m_weekendMinutesField As String
        Private m_mobileMinutesField As String
        Private m_longDistanceMinutesField As String
        Private m_peakPeriodField As String
        Private m_additionalMinutesField As Decimal
        Private m_roamingChargeField As Decimal
        Private m_voiceMailPriceField As PriceType
        Private m_includesCallerIDField As Boolean
        Private m_includesCallWaitingField As Boolean
        Private m_includesCallerIDWithCallWaitingField As Boolean
        Private m_includesCallReturnField As Boolean
        Private m_includes3WayCallingField As Boolean
        Private m_internetAccessField As DetailType
        Private m_textMessagingField As DetailType
        Private m_directoryAssistanceField As DetailType
        ' 8/2007 jwg added for g2b v4.1
        Private m_requirementsField As String

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return m_requirementsField
            End Get
            Set(ByVal value As String)
                m_requirementsField = value
            End Set
        End Property

        ''' <summary>
        '''AnytimeMinutes <BR/>
        '''Specifies the total time, in minutes, a consumer may spend making 
        '''mobile telephone calls before AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union (Int + String) 
        '''<BR/>min/max occurs: 1-1 
        '''minInclusive: 0 
        '''maxInclusive: 9999 
        '''enumeration: 
        '''Unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AnytimeMinutes() As String
            Get
                Return Me.m_anytimeMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_anytimeMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''OffPeakMinutes <BR/>
        '''Specifies the total time, in minutes, a consumer may spend making wireless telephone calls during off-peak hours before 
        '''AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-10 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''<BR/>enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OffPeakMinutes() As String
            Get
                Return Me.m_offPeakMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_offPeakMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''WeekendMinutes <BR/>
        '''Specifies the total time, in minutes, a consumer may spend making using their wireless 
        '''telephone on the weekend before AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property WeekendMinutes() As String
            Get
                Return Me.m_weekendMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_weekendMinutesField = value
            End Set
        End Property
        ''' <summary>
        '''MobileMinutes 
        '''Specifies the total time, in minutes, a consumer may spend using their wireless telephone speaking to consumers with the same carrier (i.e., mobile-to-mobile) before AdditionalMinutes charges are incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''<BR/>enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MobileMinutes() As String
            Get
                Return Me.m_mobileMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_mobileMinutesField = value
            End Set
        End Property

        Public Property LongDistanceMinutes() As String
            Get
                Return Me.m_longDistanceMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_longDistanceMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''PeakPeriod <BR/>
        '''Describes the days of the week and the hour range for the PeakPeriod. For example, M - F 7:00 a.m. - 8:59 p.m. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-100 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PeakPeriod() As String
            Get
                Return Me.m_peakPeriodField
            End Get
            Set(ByVal value As String)
                Me.m_peakPeriodField = value
            End Set
        End Property

        ''' <summary>
        '''AdditionalMinutes <BR/>
        '''
        '''The dollar amount charged for telephony minutes expended over and above other calling 
        '''feature values (Anytime Minutes, MobileMinutes, OffPeakMinutes, or WeekendMinutes) in a 
        '''WirelessVoiceOffer. 
        ''' 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        Public Property AdditionalMinutes() As Decimal
            Get
                Return Me.m_additionalMinutesField
            End Get
            Set(ByVal value As Decimal)
                Me.m_additionalMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''RoamingCharge <BR/>
        '''The dollar amount charged, per minute, for transferring a consumer's wireless telephone call from the 
        '''provider company's cell system to a neighboring company's cell system. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property RoamingCharge() As Decimal
            Get
                Return Me.m_roamingChargeField
            End Get
            Set(ByVal value As Decimal)
                Me.m_roamingChargeField = value
            End Set
        End Property

        ''' <summary>
        '''VoiceMailPrice  <BR/>
        '''The dollar amount charged for voicemail in a VoiceOffer. There is an associated Frequency attribute that 
        '''specifies how often the VoiceMailPrice is incurred. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property VoiceMailPrice() As PriceType
            Get
                Return Me.m_voiceMailPriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_voiceMailPriceField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerID() As Boolean
            Get
                Return Me.m_includesCallerIDField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallWaiting() As Boolean
            Get
                Return Me.m_includesCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID with call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerIDWithCallWaiting() As Boolean
            Get
                Return Me.m_includesCallerIDWithCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDWithCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if last call return is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallReturn() As Boolean
            Get
                Return Me.m_includesCallReturnField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallReturnField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if three-way calling is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Includes3WayCalling() As Boolean
            Get
                Return Me.m_includes3WayCallingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includes3WayCallingField = value
            End Set
        End Property

        ''' <summary>
        '''InternetAccess <BR/>
        '''Describes the online accessibility feature of a WirelessVoiceOffer. An associated Included 
        '''attribute specifies whether InternetAccess is included in the base price of a WirelessVoiceOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''max length: 200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InternetAccess() As DetailType
            Get
                Return Me.m_internetAccessField
            End Get
            Set(ByVal value As DetailType)
                Me.m_internetAccessField = value
            End Set
        End Property

        ''' <summary>
        '''TextMessaging  <BR/>
        '''Describes the type of text messaging is included in the service offer. An associated Included attribute 
        '''specifies whether TextMessaging is included in the base price of a WirelessVoiceOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TextMessaging() As DetailType
            Get
                Return Me.m_textMessagingField
            End Get
            Set(ByVal value As DetailType)
                Me.m_textMessagingField = value
            End Set
        End Property

        ''' <summary>
        ''' Describes the type of directory assistance offered in the WirelessVoiceOffer. An associated Included attribute specifies whether DirectoryAssistance is included in the base price of a WirelessVoiceOffer
        ''' <BR/>use: required
        ''' <BR/>data type: string
        ''' <BR/>min/max occurs: 1-1
        ''' <BR/>max length: 200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DirectoryAssistance() As DetailType
            Get
                Return Me.m_directoryAssistanceField
            End Get
            Set(ByVal value As DetailType)
                Me.m_directoryAssistanceField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' The set of elements that comprise a service offer for high-speed internet.
    ''' <BR/>use: required if presenting a high-speed data service offer
    ''' <BR/>min/max occurs: 1-1
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Data Offer Type: id={OfferID} , short name {ShortName} Requirements {Requirements}")> _
    Public Class DataOfferType
        Inherits OfferType

        Private m_uploadSpeedField As DataSpeedType
        Private m_downloadSpeedField As DataSpeedType
        Private m_emailAccountsField As Integer
        Private m_webspaceField As DiskSpaceType
        Private m_dialUpAccessField As Boolean
        Private m_staticIPAddressesField As Integer
        Private m_dynamicIPAddressesField As Integer
        Private m_requirementsField As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)

            Try
                sb.Append("<BR/><B>DataOfferType</B>:")
                If (m_uploadSpeedField IsNot Nothing) Then
                    sb.Append("<BR/>Upload Speed: " & m_uploadSpeedField.ToString())
                End If
                If (m_downloadSpeedField IsNot Nothing) Then
                    sb.Append("<BR/>Download Speed: " & m_downloadSpeedField.ToString())
                End If
                sb.Append("<BR/>email accounts: " & m_emailAccountsField.ToString())
                If (m_webspaceField IsNot Nothing) Then
                    sb.Append("<BR/>Web Space: " & m_webspaceField.ToString())
                End If
                sb.Append("<BR/>Dialup Access: " & DialUpAccess.ToString())
                sb.Append("<BR/>Static IP Addresses: " & m_staticIPAddressesField.ToString())

                sb.Append("<BR/>Dynamic IP Addresses: " & m_dynamicIPAddressesField.ToString())
                If (m_requirementsField IsNot Nothing) Then
                    sb.Append("<BR/>Requirements: " & m_requirementsField.ToString())
                End If
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''UploadSpeed  <BR/>
        '''With the associated Unit attribute, this specifies the data transfer speed from the consumer's premises. 
        ''' <BR/>Attributes: Unit 
        '''<BR/>use: Required 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property UploadSpeed() As DataSpeedType
            Get
                Return Me.m_uploadSpeedField
            End Get
            Set(ByVal value As DataSpeedType)
                Me.m_uploadSpeedField = value
            End Set
        End Property

        ''' <summary>
        '''DownloadSpeed  <BR/>
        '''With the associated Unit attribute, this specifies the data transfer speed to the consumer's premises. 
        ''' <BR/>Attributes: Unit 
        '''<BR/>use: Required 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DownloadSpeed() As DataSpeedType
            Get
                Return Me.m_downloadSpeedField
            End Get
            Set(ByVal value As DataSpeedType)
                Me.m_downloadSpeedField = value
            End Set
        End Property

        ''' <summary>
        '''EmailAccounts 
        '''The number of email accounts provided in a DataOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: integer 
        '''<BR/>min/max occurs: 1-1 
        '''
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  99
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property EmailAccounts() As Integer
            Get
                Return Me.m_emailAccountsField
            End Get
            Set(ByVal value As Integer)
                Me.m_emailAccountsField = value
            End Set
        End Property

        ''' <summary>
        '''Webspace  <BR/>
        '''The amount of personal web space available for a DataOffer. 
        ''' <BR/>Attributes: Unit 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''
        '''<BR/> maxInclusive:  999
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Webspace() As DiskSpaceType
            Get
                Return Me.m_webspaceField
            End Get
            Set(ByVal value As DiskSpaceType)
                Me.m_webspaceField = value
            End Set
        End Property

        ''' <summary>
        ''' Specifies if Dial-up access is provided with the cable high-speed DataOffer
        ''' <BR/>use: required
        ''' <BR/>data type: boolean
        ''' <BR/>min/max occurs: 1-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DialUpAccess() As Boolean
            Get
                Return Me.m_dialUpAccessField
            End Get
            Set(ByVal value As Boolean)
                Me.m_dialUpAccessField = value
            End Set
        End Property

        ''' <summary>
        '''StaticIPAddresses  <BR/>
        '''The number of static IP addresses provided with the DataOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  99
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property StaticIPAddresses() As Integer
            Get
                Return Me.m_staticIPAddressesField
            End Get
            Set(ByVal value As Integer)
                Me.m_staticIPAddressesField = value
            End Set
        End Property

        ''' <summary>
        ''' The number of static IP addresses provided with the DataOffer.
        ''' <BR/>use: Required
        ''' <BR/>data type: Integer
        ''' <BR/>min/max occurs: 1-1
        ''' <BR/>minInclusive: 0
        ''' <BR/>maxInclusive: 99
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DynamicIPAddresses() As Integer
            Get
                Return Me.m_dynamicIPAddressesField
            End Get
            Set(ByVal value As Integer)
                Me.m_dynamicIPAddressesField = value
            End Set
        End Property

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return Me.m_requirementsField
            End Get
            Set(ByVal value As String)
                Me.m_requirementsField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''VoiceOffer  <BR/>
    '''The set of elements that comprise a service offer for telephone service. 
    ''' <BR/>Elements: ShortName, MediumName, LongName, Price, InstallPrice, HardwarePrice, DepositPrice, Promotion, QualifiedHardware, Customization, IncludedItems, MarketingInfo, Contract, TechSupport, Disclaimer, TermsAndConditions, LongDistanceMinutes, LongDistanceCharges, VoiceMailPrice, InternationalPrice, AdditionalProce, IncludesCallerID, IncludesCallWaiting, IncludesCallerIDWithCallWaiting, IncludesCallReturn, Includes3WayCalling, Requirements 
    ''' 
    ''' <BR/>Attributes: OfferID, Version, MovesOffer 
    ''' 
    '''<BR/>use: Required if presenting a voice service offer 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' 
    '''In the Response message, each MSO may return unlimited offers. 
    '''Each of the unlimited offers must include only one Offer element (i.e., DataOffer, VideoOffer, VoiceOffer, or 
    '''WirelessVoiceOffer). 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Voice Offer Type: id={OfferID} , short name {ShortName} Requirements {Requirements}")> _
    Public Class VoiceOfferType
        Inherits OfferType

        Private m_longDistanceMinutesField As String
        Private m_longDistanceChargesField As Decimal
        Private m_voiceMailPriceField As PriceType
        Private m_internationalPriceField As PriceType
        Private m_additionalLinePriceField As PriceType
        Private m_includesCallerIDField As Boolean
        Private m_includesCallWaitingField As Boolean
        Private m_includesCallerIDWithCallWaitingField As Boolean
        Private m_includesCallReturnField As Boolean
        Private m_includes3WayCallingField As Boolean
        ' 8/2007 jwg added for g2b 4.1
        Private m_requirementsField As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(100)
            Try
                sb.Append(MyBase.ToString())
                sb.Append("<BR/><B>Voice Offer Type</B>")

                If m_longDistanceMinutesField IsNot Nothing Then
                    sb.Append("<BR/>Long Distance Minutes " & m_longDistanceMinutesField)
                End If

                sb.Append("<BR/>Long Distance Charges: " & m_longDistanceChargesField.ToString())

                If (m_voiceMailPriceField IsNot Nothing) Then
                    sb.Append("<BR/>Voice mail price: " & m_voiceMailPriceField.ToString())
                End If

                If (m_additionalLinePriceField IsNot Nothing) Then
                    sb.Append("<BR/>Additional Line price: " & m_additionalLinePriceField.ToString())
                End If

                If (m_internationalPriceField IsNot Nothing) Then
                    sb.Append("<BR/>International price: " & m_internationalPriceField.ToString())
                End If

                sb.Append("<BR/>Includes Caller ID " & IncludesCallerID.ToString())
                sb.Append("<BR/>Includes Call Waiting " & IncludesCallWaiting.ToString())
                sb.Append("<BR/>Includes Caller ID with Call Waiting " & IncludesCallerIDWithCallWaiting.ToString())
                sb.Append("<BR/>Includes Call Return " & m_includesCallReturnField.ToString())
                sb.Append("<BR/>Includes 3way calling " & m_includes3WayCallingField.ToString())

                sb.Append("<BR/>Requirements: " & Utility.DefaultString(m_requirementsField))
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''Requirements  <BR/>
        '''The hardware, software, or equipment necessary to use a service offer. 
        ''' <BR/>use: Required (for DataOffer and BundledOffers only, Optional for all other service offers) 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-1000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requirements() As String
            Get
                Return m_requirementsField
            End Get
            Set(ByVal value As String)
                m_requirementsField = value
            End Set
        End Property

        ''' <summary>
        ''' LongDistanceMinutes <BR/>
        '''Specifies the total time, in minutes, of long distance telephone calls included in the base price of the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Union 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  9999 
        '''<BR/>enumeration: unlimited
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LongDistanceMinutes() As String
            Get
                Return Me.m_longDistanceMinutesField
            End Get
            Set(ByVal value As String)
                Me.m_longDistanceMinutesField = value
            End Set
        End Property

        ''' <summary>
        '''LongDistanceCharges <BR/>
        '''Used to specify a charge (monthly or per minute) for long distance calls. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LongDistanceCharges() As Decimal
            Get
                Return Me.m_longDistanceChargesField
            End Get
            Set(ByVal value As Decimal)
                Me.m_longDistanceChargesField = value
            End Set
        End Property

        ''' <summary>
        '''VoiceMailPrice  <BR/>
        '''The dollar amount charged for voicemail in a VoiceOffer. There is an associated Frequency attribute that 
        '''specifies how often the VoiceMailPrice is incurred. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property VoiceMailPrice() As PriceType
            Get
                Return Me.m_voiceMailPriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_voiceMailPriceField = value
            End Set
        End Property

        ''' <summary>
        '''InternationalPrice <BR/>
        '''Specifies the dollar amount a consumer will be charged, per month, for access to international calling service. 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        '''<BR/>In addition to the access fee, a per-minute usage cost may be charged. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InternationalPrice() As PriceType
            Get
                Return Me.m_internationalPriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_internationalPriceField = value
            End Set
        End Property

        ''' <summary>
        '''AdditionalLinePrice  <BR/>
        '''The dollar amount charged to include a second and subsequent telephone number in a VoiceOffer. 
        ''' <BR/>Attributes: Frequency, 
        '''Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        '''<BR/>
        '''The G2B spec assumes the base price in a VoiceOffer includes one telephone number. 
        ''' </summary>
        Public Property AdditionalLinePrice() As PriceType
            Get
                Return Me.m_additionalLinePriceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_additionalLinePriceField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerID() As Boolean
            Get
                Return Me.m_includesCallerIDField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallWaiting() As Boolean
            Get
                Return Me.m_includesCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if caller ID with call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallerIDWithCallWaiting() As Boolean
            Get
                Return Me.m_includesCallerIDWithCallWaitingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallerIDWithCallWaitingField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if last call return is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludesCallReturn() As Boolean
            Get
                Return Me.m_includesCallReturnField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includesCallReturnField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if 3-way calling is included in the base price of a VoiceOffer or WirelessVoiceOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: Boolean
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Includes3WayCalling() As Boolean
            Get
                Return Me.m_includes3WayCallingField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includes3WayCallingField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' The set of elements and attributes that comprise an explanation
    ''' for the consumer of the savings, if any, associated with the
    ''' purchase of multiple service offerings
    ''' <BR/>Attributes: DiscountID, OfferType, Frequency, Amount,
    ''' Description, OfferID
    ''' <BR/>Min/max occurs: 20
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Discount: ID {DiscountID} Offer ID {OfferID} Amount {Amount} OfferType {OfferType.ToString()}")> _
    Public Class DiscountTypeQueryOffers

        Private m_requiresField() As OfferTypeEnum
        Private m_discountIDField As String
        Private m_offerTypeField As OfferTypeEnum
        Private m_frequencyField As PriceFrequencyEnum
        Private m_amountField As Decimal
        Private m_descriptionField As String
        ' 8/2007 jwg added for g2b 4.1
        Private m_offerIDField As String


        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)

            Try
                sb.Append("<BR/>DiscountTypeQueryOffer")

                sb.Append("<BR/>Offer ID : " & Utility.DefaultString(Me.m_offerIDField))

                If (Me.m_discountIDField IsNot Nothing) Then
                    sb.Append("<BR/>Discount ID: " & Me.m_discountIDField)
                End If
                If (Me.m_descriptionField IsNot Nothing) Then
                    sb.Append("<BR/>Description: " & Me.m_descriptionField)
                End If

                sb.Append("<BR/>amount: " & Me.m_amountField.ToString())
                sb.Append("<BR/>offer type: " & Me.m_offerTypeField.ToString())
                sb.Append("<BR/>frequency: " & Me.m_frequencyField.ToString())

                If (Me.m_requiresField IsNot Nothing) Then
                    For iOffer As Integer = 0 To Me.m_requiresField.Length - 1
                        sb.Append("<BR/>Requires : " & Me.m_requiresField(iOffer).ToString())
                    Next

                End If
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''Requires  <BR/>
        '''Specifies the combination of services the consumer must order to qualify for a multi-product Discount. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 2-4 
        '''<BR/>enumeration: Data, Video, Voice, WirelessVoice
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Requires() As OfferTypeEnum()
            Get
                Return Me.m_requiresField
            End Get
            Set(ByVal value As OfferTypeEnum())
                Me.m_requiresField = value
            End Set
        End Property

        ''' <summary>
        ''' The MSO-assigned ID for the discount the consumer can receive
        ''' use: Required
        ''' type: string
        ''' min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DiscountID() As String
            Get
                Return Me.m_discountIDField
            End Get
            Set(ByVal value As String)
                Me.m_discountIDField = value
            End Set
        End Property

        ''' <summary>
        '''OfferType <BR/>
        '''Specifies the category of service to which the Discount applies. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>enumeration: Data, Video, Voice, WirelessVoice
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferType() As OfferTypeEnum
            Get
                Return Me.m_offerTypeField
            End Get
            Set(ByVal value As OfferTypeEnum)
                Me.m_offerTypeField = value
            End Set
        End Property

        ''' <summary>
        '''Frequency <BR/>
        '''Specifies how often the consumer is charged, or receives, each element listed in the "Used By" 
        '''column. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''enumeration: Once, Monthly
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Frequency() As PriceFrequencyEnum
            Get
                Return Me.m_frequencyField
            End Get
            Set(ByVal value As PriceFrequencyEnum)
                Me.m_frequencyField = value
            End Set
        End Property

        ''' <summary>
        '''Amount 
        '''The dollar amount the consumer can save if they order the specified service offering with the 
        '''applicable Discount. 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>format: 10, including 2 fractional digits
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Amount() As Decimal
            Get
                Return Me.m_amountField
            End Get
            Set(ByVal value As Decimal)
                Me.m_amountField = value
            End Set
        End Property

        ''' <summary>
        ''' Description to show the consumer to explain this Discount
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description() As String
            Get
                Return Me.m_descriptionField
            End Get
            Set(ByVal value As String)
                Me.m_descriptionField = value
            End Set
        End Property

        ''' <summary>
        '''OfferID <BR/>
        '''The MSO-assigned identifier for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferID() As String
            Get
                Return Me.m_offerIDField
            End Get
            Set(ByVal value As String)
                m_offerIDField = value
            End Set
        End Property

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub

        Public Sub New(ByVal requires() As OfferTypeEnum, _
            ByVal discountID As String, _
            ByVal offerType As OfferTypeEnum, _
            ByVal frequency As PriceFrequencyEnum, _
            ByVal amount As Decimal, _
            ByVal description As String)
            Me.Requires = requires
            Me.DiscountID = discountID
            Me.OfferType = offerType
            Me.Frequency = frequency
            Me.Amount = amount
            Me.Description = description
        End Sub

        Public Sub New(ByVal requires() As OfferTypeEnum, _
            ByVal discountID As String, _
            ByVal offerType As OfferTypeEnum, _
            ByVal frequency As PriceFrequencyEnum, _
            ByVal amount As Decimal, _
            ByVal description As String, _
            ByVal offerID As String)

            Me.New(requires, discountID, _
                offerType, frequency, _
                amount, description)
            Me.m_offerIDField = offerID
        End Sub

    End Class

#End Region

#Region "G2B ScheduleInstall"

    ''' <summary>
    ''' G2BScheduleInstallRequest contains data used to pass information
    ''' from the Web Server front end to the App Server layer to make a
    ''' ScheduleInstall web service call
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BScheduleInstallRequest: Tracking ID {TrackingID}, {OfferOrder.Count} ScheduleInstall Orders")> _
    Public Class G2BScheduleInstallRequest
        Inherits ProviderRequests
        Implements IProviderParameters
        Private m_offerOrder As List(Of OfferOrderTypeG2BScheduleInstall)
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            sb.Append("<B>G2BScheduleInstallRequest</B><BR/>")
            sb.Append("Tracking ID :" & m_trackingID.ToString & "<BR/>")
            sb.Append("MSO ID :" & m_mSOID.ToString & "<BR/>")
            sb.Append("Address ID :" & m_addressID.ToString & "<BR/>")

            If (m_offerOrder IsNot Nothing) Then
                For Each objOffer As OfferOrderTypeG2BScheduleInstall In m_offerOrder
                    sb.Append(objOffer.ToString & "<BR/>")
                Next
            End If

            Return sb.ToString

        End Function

        ''' <summary>
        '''OfferOrder <BR/>
        '''The set of elements that comprise the service offer identifiers and consumer specifics for the ordered service. 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-10 
        ''' </summary>
        ''' <remarks></remarks>
        Public ReadOnly Property OfferOrder() As List(Of OfferOrderTypeG2BScheduleInstall)
            Get
                Return m_offerOrder
            End Get
        End Property

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property

        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property

        Public Sub New(ByVal offerOrder As List(Of OfferOrderTypeG2BScheduleInstall), ByVal trackingID As Integer, ByVal mSOID As Integer, ByVal addressID As String)
            Me.m_offerOrder = offerOrder
            Me.m_trackingID = trackingID
            Me.m_mSOID = mSOID
            Me.m_addressID = addressID
        End Sub
    End Class


    ''' <summary>
    ''' G2BScheduleInstallResponse contains data used to pass information
    ''' from the App Server to the Web Server layer after completion of a
    ''' ScheduleInstall web service call
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2BScheduleInstallResponse: {DisplayFunc}")> _
    Public Class G2BScheduleInstallResponse

        Inherits ProviderResults
        Implements IProviderResults
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_addressID As String
        Private m_installWindowConfirmation As List(Of InstallWindowConfirmationType)

        Private m_Results As Result

        Public Overrides Function ToString() As String
            Dim sb As New StringBuilder(1000)
            sb.Append("<B>G2BScheduleInstallResponse</B><BR/>")
            sb.Append("Tracking ID : " & m_trackingID.ToString & "<BR/>")
            sb.Append("MSO ID : " & m_mSOID.ToString & "<BR/>")
            sb.Append("Address ID : " & m_addressID.ToString & "<BR/>")
            For Each objConf As InstallWindowConfirmationType In m_installWindowConfirmation
                sb.Append("Install Window Confirmation : " & objConf.ToString() & "<BR/>")
            Next

            Return sb.ToString
        End Function

        Public ReadOnly Property DisplayFunc() As String
            Get
                If (Me.Exception) Then
                    Return "Exception: " & Me.ExceptionMessage
                End If

                Return m_Results.ToString() & ", " & _
                    " Tracking ID " & m_trackingID.ToString() & _
                    m_installWindowConfirmation.Count & " Confirmation Windows."
            End Get
        End Property

        ''' <summary>
        '''MSOInstallResult 
        '''The numeric Code and any text describing a status or an exception condition. See "Appendix A - Status Codes and Exceptions" on page 47 for more information. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 0-200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Results() As Result
            Get
                Return m_Results
            End Get
            Set(ByVal value As Result)
                m_Results = value
            End Set
        End Property

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property

        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AddressID() As String
            Get
                Return m_addressID
            End Get
        End Property

        ''' <summary>
        '''InstallWindowConfirmation <BR/>
        '''Indicates that the MSO has accepted one or more of the consumer's selection of the presented InstallWindows. 
        ''' <BR/>Attributes: OfferID, InstallConfirmationID, InstallWindowID, FollowUpMessage, ServiceLineID 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-10 
        ''' </summary>
        ''' <remarks></remarks>
        Public ReadOnly Property InstallWindowConfirmation() As List(Of InstallWindowConfirmationType)
            Get
                Return m_installWindowConfirmation
            End Get
        End Property
        Public Sub New(ByVal installWindowConfirmation As List(Of InstallWindowConfirmationType), ByVal trackingID As Integer, ByVal mSOID As Integer, ByVal addressID As String)
            Me.m_installWindowConfirmation = installWindowConfirmation
            Me.m_trackingID = trackingID
            Me.m_mSOID = mSOID
            Me.m_addressID = addressID
        End Sub
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub

        Public Sub New(ByVal installWindowConfirmation As List(Of InstallWindowConfirmationType), _
            ByVal trackingID As Integer, _
            ByVal mSOID As Integer, _
            ByVal addressID As String, _
            ByVal pobjResults As Result)

            Me.new(installWindowConfirmation, trackingID, mSOID, addressID)
            Me.m_Results = pobjResults
        End Sub

    End Class

    ''' <summary>
    ''' The set of elements that comprise the service offer identifiers and consumer specifics for the ordered service.
    ''' <BR/>use: Required
    ''' <BR/>data type: n/a
    ''' <BR/>min/max occurs: 1-10
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Offer Sched Install: Offer ID {OfferID}, {Items.Count} Items")> _
    Public Class OfferOrderTypeG2BScheduleInstall

        Private m_itemsField As List(Of String)
        Private m_itemsElementNameField As List(Of ItemsChoiceType)
        Private m_offerIDField As String
        ' 8/2007 jwg added for g2b 4.1
        Private m_serviceLineIDField As String

        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return m_serviceLineIDField
            End Get
            Set(ByVal value As String)
                m_serviceLineIDField = value
            End Set
        End Property

        Private orderConfirmationIDField As String
        Public Property Items() As List(Of String)
            Get
                Return Me.m_itemsField
            End Get
            Set(ByVal value As List(Of String))
                Me.m_itemsField = value
            End Set
        End Property

        Public Property ItemsElementName() As List(Of ItemsChoiceType)
            Get
                Return Me.m_itemsElementNameField
            End Get
            Set(ByVal value As List(Of ItemsChoiceType))
                Me.m_itemsElementNameField = value
            End Set
        End Property

        ''' <summary>
        '''OfferID <BR/>
        '''The MSO-assigned identifier for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferID() As String
            Get
                Return Me.m_offerIDField
            End Get
            Set(ByVal value As String)
                Me.m_offerIDField = value
            End Set
        End Property

        ''' <summary>
        '''OrderConfirmationID <BR/>
        '''The MSO-provided identifier for the consumer's order. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        '''<BR/>The Affiliate Site should display this attribute to the consumer following order submission.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OrderConfirmationID() As String
            Get
                Return Me.orderConfirmationIDField
            End Get
            Set(ByVal value As String)
                Me.orderConfirmationIDField = value
            End Set
        End Property

        Public Sub New(ByVal items As List(Of String), ByVal itemsElementName As List(Of ItemsChoiceType), ByVal offerID As String, ByVal orderConfirmationID As String)
            Me.Items = items
            Me.ItemsElementName = itemsElementName
            Me.OfferID = offerID
            Me.OrderConfirmationID = orderConfirmationID
        End Sub

        Public Sub New(ByVal items As List(Of String), _
            ByVal itemsElementName As List(Of ItemsChoiceType), _
            ByVal offerID As String, _
            ByVal orderConfirmationID As String, _
            ByVal pstrServiceLineID As String)

            Me.New(items, itemsElementName, offerID, orderConfirmationID)
            Me.ServiceLineID = pstrServiceLineID
        End Sub
    End Class

    Public Enum ItemsChoiceType

        ''' <summary>
        '''InstallRequest <BR/>
        '''If none of the InstallWindows presented to the consumer are acceptable, this element is used to allow the 
        '''consumer to enter text that will be passed to the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>minLength: 1 
        '''<BR/>maxLength: 100
        '''<BR/>The Affiliate Site should provide a text entry field for this element. 
        ''' </summary>
        ''' <remarks></remarks>
        InstallRequest

        ''' <summary>
        '''InstallWindowID <BR/>
        '''G2B uses both an InstallWindowID attribute and an InstallWindowID element. 
        '''As an attribute, InstallWindowID is the MSO-assigned identifier for an InstallWindow 
        '''from which the consumer can select. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <remarks></remarks>
        InstallWindowID

    End Enum

    ''' <summary>
    '''InstallWindowConfirmation <BR/>
    '''Indicates that the MSO has accepted one or more of the consumer's selection of the presented InstallWindows. 
    ''' <BR/>Attributes: OfferID, InstallConfirmationID, InstallWindowID, FollowUpMessage, ServiceLineID 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-10 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Install Window Confirmation: Offer ID: {OfferID} Install Confirmation ID: {InstallConfirmationID} install Window ID: {InstallWindowID} Message: {FollowUpMessage} ServiceLine  ID: {ServiceLineID}")> _
    Public Class InstallWindowConfirmationType
        Private offerIDField As String
        Private installConfirmationIDField As String
        Private installWindowIDField As String
        Private followUpMessageField As String
        ' 8/2007 jwg added for G2B v4.1
        Private serviceLineIDField As String

        Public Overrides Function ToString() As String
            Return "<BR/>Offer ID: " & offerIDField & _
                    "<BR/>Install Confirmation ID: " & installConfirmationIDField & _
                    "<BR/>install Window ID: " & installWindowIDField & _
                    "<BR/>Message: " & followUpMessageField & _
                    "<BR/>ServiceLine  ID: " & serviceLineIDField

        End Function
        ''' <summary>
        '''OfferID <BR/>
        '''The MSO-assigned identifier for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferID() As String
            Get
                Return Me.offerIDField
            End Get
            Set(ByVal value As String)
                Me.offerIDField = value
            End Set
        End Property

        ''' <summary>
        '''InstallConfirmationID 
        '''The MSO-assigned identifier indicating that the MSO is able to perform the installation during the 
        '''InstallWindow selected by the consumer. This InstallWindow is identified in Install WindowID attribute. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        '''<BR/>The Affiliate Site should display this attribute to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InstallConfirmationID() As String
            Get
                Return Me.installConfirmationIDField
            End Get
            Set(ByVal value As String)
                Me.installConfirmationIDField = value
            End Set
        End Property

        ''' <summary>
        '''InstallWindowID <BR/>
        '''G2B 4.1 uses both an InstallWindowID attribute and an InstallWindowID element. 
        '''As an element, InstallWindowID represents the consumer's selection(s) of the presented InstallWindows. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-3 
        '''<BR/>min/max length: 1-30
        '''<BR/>Up to three selections may be presented, listed in order of preference. 
        '''The Affiliate Site should include this InstallWindowID in the ScheduleInstall message and this ID 
        '''will be returned in the MSO's InstallWindow Confirmation message. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InstallWindowID() As String
            Get
                Return Me.installWindowIDField
            End Get
            Set(ByVal value As String)
                Me.installWindowIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Verbiage explaining what the consumer can expect relative to service installation and/or any final information the MSO wishes the consumer to have; e.g., order number, order cancellation acknowledgement, toll-free support telephone number, etc.
        ''' <BR/>use: Optional
        ''' <BR/>data type: String
        ''' <BR/>min/max length: 1-500
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property FollowUpMessage() As String
            Get
                Return Me.followUpMessageField
            End Get
            Set(ByVal value As String)
                Me.followUpMessageField = value
            End Set
        End Property
        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return serviceLineIDField
            End Get
            Set(ByVal value As String)
                serviceLineIDField = value
            End Set
        End Property
        Public Sub New(ByVal offerID As String, _
            ByVal installConfirmationID As String, _
            ByVal installWindowID As String, _
            ByVal followUpMessage As String)
            Me.OfferID = offerID
            Me.InstallConfirmationID = installConfirmationID
            Me.InstallWindowID = installWindowID
            Me.FollowUpMessage = followUpMessage
        End Sub
        Public Sub New(ByVal offerID As String, _
                ByVal installConfirmationID As String, _
                ByVal installWindowID As String, _
                ByVal followUpMessage As String, _
                ByVal serviceLineID As String)
            Me.new(offerID, installConfirmationID, installWindowID, followUpMessage)
            Me.serviceLineIDField = serviceLineID
        End Sub
    End Class

    ''' <summary>
    '''InstallWindow <BR/>
    '''Specifies the date(s) and range(s) of hours available for installation of service 
    '''hardware/software from which the consumer can choose. 
    ''' <BR/>Attributes: 
    '''InstallWindowID, Date, StartTime, EndTime 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-100 
    ''' <BR/>Each InstallWindow element represents a specific data/time range; e.g., May 26, 2005, between 8:00am - 11:00am 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
<DebuggerDisplay("InstallWindowType: ID={installWindowIDField}, Date={dateField}, Start/End={StartTime}/{EndTime} ")> _
Public Class InstallWindowType

        Private installWindowIDField As String

        Private dateField As String

        Private startTimeField As String

        Private endTimeField As String

        Public Overrides Function ToString() As String
            Return "<table><tr><td colspan=3>Install Window</td></tr>" & _
                    "<tr><td>ID: " & installWindowIDField & _
                    "</td><td>Date: " & dateField & _
                    "</td><td>StartEnd: " & startTimeField & "/" & endTimeField & _
                    "</td></tr></table>"

        End Function

        ''' <summary>
        '''InstallWindowID <BR/>
        '''G2B 4.1 uses both an InstallWindowID attribute and an InstallWindowID element. 
        '''As an element, InstallWindowID represents the consumer's selection(s) of the presented InstallWindows. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-3 
        '''<BR/>min/max length: 1-30
        '''<BR/>Up to three selections may be presented, listed in order of preference. 
        '''The Affiliate Site should include this InstallWindowID in the ScheduleInstall message and this ID 
        '''will be returned in the MSO's InstallWindow Confirmation message. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InstallWindowID() As String
            Get
                Return Me.installWindowIDField
            End Get
            Set(ByVal value As String)
                Me.installWindowIDField = value
            End Set
        End Property

        ''' <summary>
        ''' A calendar date of the MSO's InstallWindow
        ''' <BR/>use: required
        ''' <BR/>data type: Date
        ''' <BR/>format: CCYY-MM-DD
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property [Date]() As String
            Get
                Return Me.dateField
            End Get
            Set(ByVal value As String)
                Me.dateField = value
            End Set
        End Property

        ''' <summary>
        '''Used in conjunction with EndTime to compose the InstallWindow 
        '''element, this attribute defines the earliest time of day that an installer 
        '''would arrive for the applicable InstallWindow. 
        '''<BR/>use: Required 
        '''
        '''<BR/>min/max length: 
        '''<BR/>format: nn:nn:nn-nn:nn 
        '''where -nn:nn is optional. 
        '''e.g., 14:00:00-05:00. The first six 
        '''digits are hours, minutes, and seconds. The last 
        '''four digits represents the hours offset from 
        '''Greenwich Mean Time; e.g., -05:00 is the Eastern time zone, -07:00 is the 
        '''Mountain time zone, etc.
        '''
        '''If the time zone is not specified, it is assumed to be Eastern time. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property StartTime() As String
            Get
                Return Me.startTimeField
            End Get
            Set(ByVal value As String)
                Me.startTimeField = value
            End Set
        End Property

        ''' <summary>
        '''Used in conjunction with StartTime to compose the InstallWindow 
        '''element, this attribute defines the latest time of day that an installer 
        '''would arrive for the applicable InstallWindow. 
        '''<BR/>use: Required 
        '''
        '''<BR/>min/max length: 
        '''<BR/>format: nn:nn:nn-nn:nn 
        '''where -nn:nn is optional. 
        '''e.g., 14:00:00-05:00. The first six 
        '''digits are hours, minutes, and seconds. The last 
        '''four digits represents the hours offset from 
        '''Greenwich Mean Time; e.g., -05:00 is the Eastern time zone, -07:00 is the 
        '''Mountain time zone, etc.
        '''
        '''If the time zone is not specified, it is assumed to be Eastern time. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property EndTime() As String
            Get
                Return Me.endTimeField
            End Get
            Set(ByVal value As String)
                Me.endTimeField = value
            End Set
        End Property

        Public Sub New(ByVal installWindowID As String, ByVal installDate As String, ByVal startTime As String, ByVal endTime As String)
            Me.installWindowIDField = installWindowID
            Me.dateField = installDate
            Me.startTimeField = startTime
            Me.endTimeField = endTime
        End Sub
    End Class

    ''' <summary>
    ''' Indicates that the MSO has received the order request.
    ''' <BR/>Elements: InstallWindow
    ''' <BR/>Attributes: OfferID, OrderConfirmationID, FollowupMessage
    ''' <BR/>use: Optional
    ''' <BR/>data type: n/a
    ''' <BR/>min/max occurs: 0-10
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("ConfirmationType: Offer ID {offerIDField}, ConfirmationID {orderConfirmationIDField}, {installWindowField.Count} Install Windows}")> _
    Public Class ConfirmationType

        Private installWindowField As List(Of InstallWindowType)

        Private offerIDField As String

        Private orderConfirmationIDField As String

        Private followUpMessageField As String

        ' 8/2007 jwg added for G2BV4.1
        Private serviceLineIDField As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)
            sb.Append("<h4>Confirmations</h4><br/>")
            sb.Append("Offer ID :" & offerIDField & "<br/>")
            sb.Append("Order Confirmation ID :" & orderConfirmationIDField & "<br/>")
            sb.Append("Message: " & followUpMessageField & "<br/>")
            If (installWindowField IsNot Nothing) Then
                sb.Append("<B>Install Windows</B><BR/>")
                For iItem As Integer = 0 To installWindowField.Count - 1
                    sb.Append("Install Window : " & installWindowField(iItem).ToString() & "<br/>")
                Next
            End If
            Return sb.ToString()
        End Function

        ''' <summary>
        '''InstallWindow <BR/>
        '''Specifies the date(s) and range(s) of hours available for installation of service 
        '''hardware/software from which the consumer can choose. 
        ''' <BR/>Attributes: 
        '''InstallWindowID, Date, StartTime, EndTime 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-100 
        ''' <BR/>Each InstallWindow element represents a specific data/time range; e.g., May 26, 2005, between 8:00am - 11:00am 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property InstallWindow() As List(Of InstallWindowType)
            Get
                Return Me.installWindowField
            End Get
            Set(ByVal value As List(Of InstallWindowType))
                Me.installWindowField = value
            End Set
        End Property

        ''' <summary>
        '''OfferID <BR/>
        '''The MSO-assigned identifier for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferID() As String
            Get
                Return Me.offerIDField
            End Get
            Set(ByVal value As String)
                Me.offerIDField = value
            End Set
        End Property

        ''' <summary>
        '''ServiceLineID  <BR/>
        '''An MSO-assigned identifier used to specify a service type contained in a bundled offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceLineID() As String
            Get
                Return serviceLineIDField
            End Get
            Set(ByVal value As String)
                serviceLineIDField = value
            End Set
        End Property

        ''' <summary>
        '''OrderConfirmationID <BR/>
        '''The MSO-provided identifier for the consumer's order. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        '''<BR/>The Affiliate Site should display this attribute to the consumer following order submission.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OrderConfirmationID() As String
            Get
                Return Me.orderConfirmationIDField
            End Get
            Set(ByVal value As String)
                Me.orderConfirmationIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Verbiage explaining what the consumer can expect relative to service installation and/or any final information the MSO wishes the consumer to have; e.g., order number, order cancellation acknowledgement, toll-free support telephone number, etc.
        ''' <BR/>use: Optional
        ''' <BR/>data type: String
        ''' <BR/>min/max length: 1-500
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property FollowUpMessage() As String
            Get
                Return Me.followUpMessageField
            End Get
            Set(ByVal value As String)
                Me.followUpMessageField = value
            End Set
        End Property

        Public Sub New(ByVal installWindow As List(Of InstallWindowType), ByVal offerID As String, ByVal orderConfirmationID As String, ByVal followUpMessage As String)
            Me.installWindowField = installWindow
            Me.offerIDField = offerID
            Me.orderConfirmationIDField = orderConfirmationID
            Me.followUpMessageField = followUpMessage
        End Sub

        Public Sub New(ByVal installWindow As List(Of InstallWindowType), _
            ByVal offerID As String, _
            ByVal orderConfirmationID As String, _
            ByVal followUpMessage As String, _
            ByVal serviceLineID As String)

            Me.New(installWindow, offerID, orderConfirmationID, followUpMessage)
            Me.serviceLineIDField = serviceLineID
        End Sub

    End Class


#End Region

#Region "G2B Authenticate"
    ' added for 4.1 new Authenticate Message:
    ''' <summary>
    ''' G2BAuthenticateRequest is used by the Web Server front-end to
    ''' submit an Authenticate message from the App Server.
    '''<BR/>
    '''The collection of elements used to perform Authentication. Sub-Elements: 
    '''FirstName, LastName, ServiceAddressPhone, ServiceAddress, CreditCard, DateOfBirth, DriversLicense, DriversLicenseState, SocialSecurityNumber, SSN4, AuthFieldInput 
    ''' <BR/>Attributes: TrackingID, MSOID, NewCustomer 
    ''' </summary>
    ''' <remarks>This object contains input data to be sent to the
    ''' G2B Authenticate web service.</remarks>
    <Serializable()> _
    <DebuggerDisplay("G2B Auth Request: Tracking ID={TrackingID}, Name= {FirstName} {LastName}, SSN={SocialSecurityNumber}, SSN4={SSN4}")> _
    Public Class G2BAuthenticateRequest
        Inherits ProviderRequests
        Implements IProviderParameters
        Private m_trackingID As Integer
        Private m_mSOID As Integer
        Private m_newCustomer As Boolean
        Private m_firstName As String
        Private m_lastName As String
        Private m_serviceAddressPhone As String
        Private m_ServiceAddress As UnparsedUSAddressType = New UnparsedUSAddressType()
        Private m_creditCard As CreditCardType = New CreditCardType()
        Private m_DateOfBirth As DateTime
        Private m_DriversLicense As String
        Private m_DriversLicenseState As String
        Private m_SocialSecurityNumber As String
        Private m_SSN4 As String
        Private m_AuthFieldInput As List(Of G2BAuthFieldInput) = New List(Of G2BAuthFieldInput)()

        ''' <summary>
        ''' General authorization field inputs from customer.
        ''' <BR/>Attributes: AuthFieldID, Value
        ''' <BR/>use: Optional
        ''' <BR/>data type: n/a
        ''' <BR/>min/max occurs: 0-20
        ''' <BR/>min/max length: n/a
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AuthFieldInput() As List(Of EntityG2BServices.G2BAuthFieldInput)
            Get
                Return m_AuthFieldInput
            End Get
            Set(ByVal value As List(Of EntityG2BServices.G2BAuthFieldInput))
                m_AuthFieldInput = value
            End Set
        End Property

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)
            Try
                sb.Append("<BR/>G2BAuthenticateRequest")
                sb.Append("<BR/>Tracking ID: " & m_trackingID.ToString())
                sb.Append("<BR/>Tracking ID: " & m_mSOID.ToString())
                sb.Append("<BR/>New Customer: " & m_newCustomer.ToString())
                sb.Append("<BR/>First Name: " & Utility.DefaultString(m_firstName))
                sb.Append("<BR/>last Name: " & Utility.DefaultString(m_lastName))
                sb.Append("<BR/>Service Address Phone: " & Utility.DefaultString(m_serviceAddressPhone))
                If Me.m_ServiceAddress IsNot Nothing Then
                    sb.Append("<BR/>Service Address: " & Me.m_ServiceAddress.ToString())
                End If
                'If Me.m_creditCard IsNot Nothing Then
                sb.Append("<BR/>Credit Card: " & Me.m_creditCard.ToString())
                '     End If
                sb.Append("<BR/>Date of Birth: " & m_DateOfBirth.ToLongDateString())
                sb.Append("<BR/>Drivers License: " & Utility.DefaultString(m_DriversLicense))
                sb.Append("<BR/>Drivers License State: " & Utility.DefaultString(m_DriversLicenseState))
                sb.Append("<BR/>SSN: " & Utility.DefaultString(m_SocialSecurityNumber))
                sb.Append("<BR/>SSN4: " & Utility.DefaultString(m_SSN4))
                If (m_AuthFieldInput IsNot Nothing) Then

                    For iItem As Integer = 0 To m_AuthFieldInput.Count - 1
                        sb.Append("<BR/>Auth Field Input: " & m_AuthFieldInput(iItem).ToString())
                    Next
                End If

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
            Set(ByVal value As Integer)
                m_trackingID = value
            End Set
        End Property

        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
            Set(ByVal value As Integer)
                m_mSOID = value
            End Set
        End Property

        ''' <summary>
        '''NewCustomer <BR/>
        '''A member of the set of data items used by MSOs to tell affiliates what items to collect from consumers in order to perform Authentication. 
        ''' <BR/>Elements: 
        '''StandardAuthField, CustomAuthField 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-5 
        '''<BR/>min/max length: n/a
        '''<BR/>NewCustomer Indicates if the Authentication request is for a new customer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property NewCustomer() As Boolean
            Get
                Return m_newCustomer
            End Get
            Set(ByVal value As Boolean)
                m_newCustomer = value
            End Set
        End Property

        ''' <summary>
        '''ServiceAddress  <BR/>
        '''Address of home that will be serviced. 
        ''' <BR/>Elements: AddressLine, Suite, City, State, Zip, Zip4
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        ''' <BR/>
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceAddress() As UnparsedUSAddressType
            Get
                Return m_ServiceAddress
            End Get
            Set(ByVal value As UnparsedUSAddressType)
                m_ServiceAddress = value
            End Set
        End Property

        ''' <summary>
        ''' The consumer's first name
        ''' <BR/>use: required
        ''' <BR/>data type: string
        ''' <BR/>min/max occurs:1-1
        ''' <BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property FirstName() As String
            Get
                Return m_firstName
            End Get
            Set(ByVal value As String)
                m_firstName = value
            End Set
        End Property

        ''' <summary>
        '''LastName <BR/>
        '''The consumer's surname. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min max occurs: 1-1 
        '''<BR/>min max length: 1-30
        '''Some MSO systems apply additional restrictions to customer data. For example, Time Warner will reject the 
        '''order if any of the following characters appear in the first name or last name fields. It 
        '''may be advisable to check with specific MSOs for additional data requirements or restrictions. 
        ''' </summary>
        Public Property LastName() As String
            Get
                Return m_lastName
            End Get
            Set(ByVal value As String)
                m_lastName = value
            End Set
        End Property

        ''' <summary>
        '''ServiceAddressPhone  <BR/>
        '''The telephone number at the service address. May differ from ContactPhone. 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: \d{10} 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ServiceAddressPhone() As String
            Get
                Return m_serviceAddressPhone
            End Get
            Set(ByVal value As String)
                m_serviceAddressPhone = value
            End Set
        End Property

        ''' <summary>
        ''' Used to provide the consumer's credit card info to the MSO, if the
        ''' Affiliate's business deal with the MSO requires collection of credit
        ''' card information.
        ''' <BR/>use: optional
        ''' <BR/>data type: n/a
        ''' <BR/>Elements: Name, Number, Expiration, SecurityCode,
        ''' BillingFullName, BillingPhone, BillingAddrses
        ''' <BR/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CreditCard() As CreditCardType
            Get
                Return Me.m_creditCard
            End Get
            Set(ByVal value As CreditCardType)
                m_creditCard = value
            End Set
        End Property

        ''' <summary>
        ''' The main account holder or applying consumer's date of birth
        ''' <BR/>Expected format: ccyy-mm-dd
        ''' <BR/>use: optional
        ''' <BR/>data type: date
        ''' <BR/>min/max occurs: 0-1
        ''' <BR/>min/max length: 1-8
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DateOfBirth() As DateTime
            Get
                Return Me.m_DateOfBirth
            End Get
            Set(ByVal value As DateTime)
                m_DateOfBirth = value
            End Set
        End Property

        ''' <summary>
        ''' The main account holder or applying consumer's Drivers License
        ''' <BR/>use: optional
        ''' <BR/>data type: string
        ''' <BR/>min/max occurs: 0-1
        ''' <BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DriversLicense() As String
            Get
                Return m_DriversLicense
            End Get
            Set(ByVal value As String)
                m_DriversLicense = value
            End Set
        End Property

        ''' <summary>
        '''The state from which the main account holder or applying consumer's 
        '''driver's license was issued. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DriversLicenseState() As String
            Get
                Return m_DriversLicenseState
            End Get
            Set(ByVal value As String)
                m_DriversLicenseState = value
            End Set
        End Property

        ''' <summary>
        '''SocialSecurityNumber  <BR/>
        '''The main account holder or applying consumer's social security number. 
        '''<BR/>use: Required/Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 9-9
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SocialSecurityNumber() As String
            Get
                Return m_SocialSecurityNumber
            End Get
            Set(ByVal value As String)
                m_SocialSecurityNumber = value
            End Set
        End Property

        ''' <summary>
        '''SSN4  <BR/>
        '''The last four digits of the main account holder or applying consumer's social security number. 
        '''<BR/>use: Required/Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 4-4
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SSN4() As String
            Get
                Return m_SSN4
            End Get
            Set(ByVal value As String)
                m_SSN4 = value
            End Set
        End Property

        ''' <summary>
        ''' Default no-arg constructor
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub

        'Public ReadOnly Property AuthFieldInput() As List(Of EntityG2BServices.G2BAuthFieldInput)
        '    Get
        '        Return _AuthFieldInput
        '    End Get
        'End Property
        Public Sub New(ByVal pintTrackingID As Integer, _
                        ByVal pintMSOID As Integer, _
                        ByVal pblnNewCustomer As Boolean, _
                        ByVal pstrFirstName As String, _
                        ByVal pstrLastName As String, _
                        ByVal pstrServiceAddressPhone As String, _
                        ByVal pobjServiceAddress As UnparsedUSAddressType, _
                        ByVal pobjCreditCard As CreditCardType, _
                        ByVal pdtDateOfBirth As DateTime, _
                        ByVal pstrDriversLicense As String, _
                        ByVal pstrDriversLicenseState As String, _
                        ByVal pstrSocialSecurityNumber As String, _
                        ByVal pstrSSN4 As String, _
                        ByVal pstrAuthFieldInput As List(Of G2BAuthFieldInput))
            Me.m_trackingID = pintTrackingID
            Me.m_mSOID = pintMSOID
            Me.m_newCustomer = pblnNewCustomer
            Me.m_firstName = pstrFirstName
            Me.m_lastName = pstrLastName
            Me.m_serviceAddressPhone = pstrServiceAddressPhone
            Me.m_ServiceAddress = pobjServiceAddress
            Me.m_creditCard = pobjCreditCard
            Me.m_DateOfBirth = pdtDateOfBirth
            Me.m_DriversLicense = pstrDriversLicense
            Me.m_DriversLicenseState = pstrDriversLicenseState
            Me.m_SocialSecurityNumber = pstrSocialSecurityNumber
            Me.m_SSN4 = pstrSSN4
            Me.m_AuthFieldInput = pstrAuthFieldInput

        End Sub
    End Class

    ''' <summary>
    '''AuthFieldInput  <BR/>
    '''General authorization field inputs from customer. 
    ''' <BR/>Attributes: AuthFieldID, Value 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-20 
    '''<BR/>min/max length: n/a
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2B Auth Fld Input: ID={ID}, Value={Value}")> _
    Public Class G2BAuthFieldInput
        Private m_IDField As String
        Private m_valueField As String


        Public Overrides Function ToString() As String
            Return "AuthFieldInput ID : " & Utility.DefaultString(m_IDField) & _
                    " Value: " & Utility.DefaultString(m_valueField)
        End Function

        ''' <summary>
        ''' MSO-assigned identifier for this AuthFieldInput field
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ID() As String
            Get
                Return Me.m_IDField
            End Get
            Set(ByVal value As String)
                Me.m_IDField = value
            End Set
        End Property

        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As String
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As String)
                Me.m_valueField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''AuthQuestion  <BR/>
    '''General authorization field inputs from customer. 
    ''' <BR/>Attributes: AuthFieldID, Value 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-20 
    '''<BR/>min/max length: n/a
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("G2B Auth Fld Input: ID={ID}, Value={Value}")> _
    Public Class G2BAuthQuestion
        Private m_IDField As String
        Private m_valueField As String


        Public Overrides Function ToString() As String
            Return "AuthFieldInput ID : " & Utility.DefaultString(m_IDField) & _
                    " Value: " & Utility.DefaultString(m_valueField)
        End Function

        ''' <summary>
        ''' MSO-assigned identifier for this AuthFieldInput field
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ID() As String
            Get
                Return Me.m_IDField
            End Get
            Set(ByVal value As String)
                Me.m_IDField = value
            End Set
        End Property

        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As String
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As String)
                Me.m_valueField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' G2BAuthenticateResponse is used by the App Server to
    ''' return data from an Authenticate message to the Web Server front-end.
    ''' <BR/>
    '''If Authentication is supported and the customer chose to 
    '''participate, this element houses the set of data 
    '''items that can be returned by the MSO as 
    '''a result of a successful Authentication. 
    ''' </summary>
    ''' <remarks>This object contains output data from the
    ''' G2B Authenticate web service, to be returned to the 
    ''' Web Server.</remarks>
    <Serializable()> _
    <DebuggerDisplay("G2B Auth Response: Results={AuthenticateResults.ToString()}, Tracking ID={TrackingID}")> _
    Public Class G2BAuthenticateResponse
        Inherits ProviderResults
        Implements IProviderResults
        Private m_Results As Result
        Private m_trackingID As Integer
        Private m_mSOID As Integer

        ''' <summary>
        '''AuthenticateResult  <BR/>
        '''The response from the MSO indicating if the consumer was authenticated or is authorized services. 
        ''' <BR/>Attributes: Code , Value
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property AuthenticateResults() As Result
            Get
                Return m_Results
            End Get
        End Property
        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)
            Try
                sb.Append("<BR/>AuthenticateResponse")
                sb.Append("<BR/>Tracking ID: " & m_trackingID.ToString())
                sb.Append("<BR/>MSO ID: " & m_mSOID.ToString())
                If m_Results IsNot Nothing Then
                    sb.Append("<BR/>Results : " & m_Results.ToString())
                End If
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function
        ''' <summary>
        '''TrackingID  <BR/>
        '''The G2B-assigned numeric identifier that allows transactions to be traced and ties the transaction path 
        '''together as a group. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 0
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property TrackingID() As Integer
            Get
                Return m_trackingID
            End Get
        End Property
        ''' <summary>
        '''MSOID <BR/>
        '''The G2B-assigned 10-digit identifier that contains the 4-digit MSO ID assigned by CableLabs, plus 6 digits provided by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min Inclusive: 1000000000 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MSOID() As Integer
            Get
                Return m_mSOID
            End Get
        End Property
        Public Sub New(ByVal trackingID As Integer, ByVal msoID As Integer, _
            ByVal result As Result)
            Me.m_trackingID = trackingID
            Me.m_mSOID = msoID
            Me.m_Results = result
        End Sub
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub

    End Class

#End Region

#Region "Other"
    <Serializable()> _
    <DebuggerDisplay("EntityUI Rules: status={status}, Error={errorText}, Data={Data}")> _
     Public Class EntityUIRules
        Inherits ProviderResults
        Implements IProviderResults

        Private m_data As String
        Private m_errorTextField As String
        Private m_statusField As String

        Public Property Data() As String
            Get
                Return Me.m_data
            End Get
            Set(ByVal value As String)
                Me.m_data = value
            End Set
        End Property

        Public Property errorText() As String
            Get
                Return Me.m_errorTextField
            End Get
            Set(ByVal value As String)
                Me.m_errorTextField = value
            End Set
        End Property

        Public Property status() As String
            Get
                Return Me.m_statusField
            End Get
            Set(ByVal value As String)
                Me.m_statusField = value
            End Set
        End Property
    End Class
#End Region

#Region "Common"
    <Serializable()> _
    Public Class Utility
        Public Shared Function DefaultString(ByVal pobj As Object) As String
            If (pobj Is Nothing) Then
                Return String.Empty
            Else
                Return pobj.ToString()
            End If
        End Function

    End Class

    ''' <summary>
    ''' Define an affiliate
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Affiliate: ID {AffiliateID} ")> _
    Public Class AffiliateType

        Private m_affiliateIDField As Integer
        Private m_storeIDField As String
        Private m_salesPersonIDField As String
        Private m_departmentField As String
        Private m_promotionalCodeField As String
        Private m_customReferenceField As String
        Private m_g2BVersionField As Decimal
        Private m_anyAttrField() As System.Xml.XmlAttribute

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Affiliate")
                sb.Append("<BR/>ID: " & m_affiliateIDField.ToString())
                If (m_storeIDField IsNot Nothing) Then
                    sb.Append("<BR/>Store ID: " & m_storeIDField)
                End If
                If (m_salesPersonIDField IsNot Nothing) Then
                    sb.Append("<BR/>SalesPerson ID: " & m_salesPersonIDField)
                End If
                If (m_departmentField IsNot Nothing) Then
                    sb.Append("<BR/>department: " & m_departmentField)
                End If
                If (m_promotionalCodeField IsNot Nothing) Then
                    sb.Append("<BR/>Promotion Code: " & m_promotionalCodeField)
                End If
                If (m_customReferenceField IsNot Nothing) Then
                    sb.Append("<BR/>Custom Reference: " & m_customReferenceField)
                End If
                sb.Append("<BR/>G2B Version: " & m_g2BVersionField)
                If (m_anyAttrField IsNot Nothing) Then
                    For iAttr As Integer = 0 To m_anyAttrField.Length - 1
                        sb.Append("<BR/> Attribute " & iAttr.ToString & ":" & _
                                    AnyAttr(iAttr).ToString())
                    Next
                End If

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''AffiliateID <BR/>
        '''Identifies the Affiliate to the G2B system and the MSO. The AffiliateID is 
        '''assigned by CableLabs as part of the Affiliate agreement. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''minInclusive: 100000 
        '''maxInclusive: 999999
        '''
        '''The AffiliateID should be the same for all messages submitted for a specific consumer request. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AffiliateID() As Integer
            Get
                Return Me.m_affiliateIDField
            End Get
            Set(ByVal value As Integer)
                Me.m_affiliateIDField = value
            End Set
        End Property

        ''' <summary>
        '''StoreID  <BR/>
        '''The Affiliate's identification of the physical point of sale. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property StoreID() As String
            Get
                Return Me.m_storeIDField
            End Get
            Set(ByVal value As String)
                Me.m_storeIDField = value
            End Set
        End Property

        ''' <summary>
        '''SalesPersonID  <BR/>
        '''The Affiliate's identifier for a sales person. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SalesPersonID() As String
            Get
                Return Me.m_salesPersonIDField
            End Get
            Set(ByVal value As String)
                Me.m_salesPersonIDField = value
            End Set
        End Property

        ''' <summary>
        ''' The affiliate's identifier for a sales department.
        ''' <BR/>Use: optional
        ''' <BR/>Data Type: string
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Department() As String
            Get
                Return Me.m_departmentField
            End Get
            Set(ByVal value As String)
                Me.m_departmentField = value
            End Set
        End Property

        ''' <summary>
        ''' Consumer-entered Promotional Code to be applied to any
        ''' offers that are displayed
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PromotionalCode() As String
            Get
                Return Me.m_promotionalCodeField
            End Get
            Set(ByVal value As String)
                Me.m_promotionalCodeField = value
            End Set
        End Property

        Public Property CustomReference() As String
            Get
                Return Me.m_customReferenceField
            End Get
            Set(ByVal value As String)
                Me.m_customReferenceField = value
            End Set
        End Property

        ''' <summary>
        '''G2BVersion 
        '''Identifies the software version number of the Affiliate's G2B implementation. 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal , enumeration: 3.0, 4.0, 4.1
        '''
        '''
        '''A G2B v4.1 Affiliate Site should populate this attribute with 4.1. For G2B v3.0 Affiliate Site, G2B will 
        '''automatically populate MSOOffers messages with 3.0. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property G2BVersion() As Decimal
            Get
                Return Me.m_g2BVersionField
            End Get
            Set(ByVal value As Decimal)
                Me.m_g2BVersionField = value
            End Set
        End Property

        ''' <summary>
        '''anyAttribute <BR/>
        '''A placeholder for any special information that an MSO requests the Affiliate to supply. 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        ''' 
        '''G2B does not define any characteristics for this attribute. Both the Affiliate and the MSO must have 
        '''an explicit agreement as to its content before using anyAttribute. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AnyAttr() As System.Xml.XmlAttribute()
            Get
                Return Me.m_anyAttrField
            End Get
            Set(ByVal value As System.Xml.XmlAttribute())
                Me.m_anyAttrField = value
            End Set
        End Property
    End Class

    Public Enum AllServiceEnum

        m_CableHighSpeedData
        m_CableBasicVideo
        m_CableDigitalVideo
        m_CableHDVideo
        m_CableDVR

        m_CableVoice
        m_CableHomeNetwork
        m_DSL
        m_SatelliteVideo
        m_DialUpInternet
    End Enum

    Public Enum CableServiceEnum

        m_CableHighSpeedData
        m_CableBasicVideo
        m_CableDigitalVideo
        m_CableHDVideo
        m_CableDVR

        m_CableVoice
        m_CableHomeNetwork
        m_CableWirelessVoice
    End Enum

    ''' <summary>
    '''Channel  <BR/>
    '''Lists the basic channels and/or premium channels available in a VideoOffer. 
    '''<BR/>use: Optional 
    '''<BR/>data type: String 
    '''<BR/>min/max occurs: 0-
    '''500 
    '''<BR/>min/max length: 1-50
    '''
    '''As the list of channels can contain up to 500 entries, it is suggested that the 
    '''Affiliate consider a "pop-up" window or new page link to display of the channel line-up. 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Channels: {_channelField.Length} Channel Items, Number of Channels {_numberField}")> _
    Public Class ChannelsType

        Private m_channelField() As String
        Private m_numberField As String

        ''' <summary>
        ''' Lists the basic channels and/or premium channels available in a VideoOffer.
        ''' <BR/>use: Optional
        ''' <BR/>data type: String
        ''' <BR/>min/max occurs: 0-500
        ''' <BR/>min/max length: 1-50
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Channel() As String()
            Get
                Return Me.m_channelField
            End Get
            Set(ByVal value As String())
                Me.m_channelField = value
            End Set
        End Property

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)

            Try
                sb.Append("<BR/>Channels: ")
                If (Me.Number IsNot Nothing) Then
                    sb.Append("number=" & Me.Number.ToString())
                End If

                If (Me.m_channelField IsNot Nothing) Then
                    For i As Integer = 0 To Me.m_channelField.Length - 1
                        sb.Append("<BR/>Channel: " & Me.m_channelField(i).ToString)
                    Next
                End If

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''Number <br/>
        '''Number or Number Range specifying how many Channels or 
        '''PremiumChannels are available for a VideoOffer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-11
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Number() As String
            Get
                Return Me.m_numberField
            End Get
            Set(ByVal value As String)
                Me.m_numberField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''Choice 
    '''The attributes and Price element that comprise the options from which the consumer can select 
    '''to tailor the service order to suit their needs. 
    ''' <BR/>Elements: Price 
    ''' <BR/>Attributes: ChoiceID, Name, Description 
    '''<BR/>use: Required 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-10 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Choice Type: id={_choiceIDField} , Name {_nameField}, Price {_priceField.ToString()} ")> _
    Public Class ChoiceType

        Private m_priceField As PriceType
        Private m_choiceIDField As String
        Private m_nameField As String
        Private m_descriptionField As String

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Choice Type")
                sb.Append("<BR/>Choice ID: " & Utility.DefaultString(m_choiceIDField) & _
                        ", Name: " & Utility.DefaultString(m_nameField) & _
                        ", Description: " & Utility.DefaultString(m_descriptionField))
                If (m_priceField IsNot Nothing) Then
                    sb.Append("<BR/>Price:" & m_priceField.ToString())
                End If
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function
        ''' <summary>
        '''Price <BR/>
        '''The dollar amount charged for a service offering or the dollar amount charged for a Customization. An associated Frequency attribute specifies how often the Price will occur. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits        
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Price() As PriceType
            Get
                Return Me.m_priceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_priceField = value
            End Set
        End Property

        ''' <summary>
        '''ChoiceID 
        '''As an element, ChoiceID is the MSO-assigned identifier(s) for the option(s) selected 
        '''by the consumer and included by the Affiliate with the order submission. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-10 
        '''<BR/>min/max length: 1-30
        '''<BR/>
        '''The Affiliate Site should not display this element to the consumer. 
        ''' <BR/>
        '''As an attribute, ChoiceID is the MSO-assigned identifier for an option to be 
        '''presented to the consumer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ChoiceID() As String
            Get
                Return Me.m_choiceIDField
            End Get
            Set(ByVal value As String)
                Me.m_choiceIDField = value
            End Set
        End Property


        Public Property Name() As String
            Get
                Return Me.m_nameField
            End Get
            Set(ByVal value As String)
                Me.m_nameField = value
            End Set
        End Property

        ''' <summary>
        ''' Description for the consumer of this choice
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description() As String
            Get
                Return Me.m_descriptionField
            End Get
            Set(ByVal value As String)
                Me.m_descriptionField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''Contract <BR/>
    '''If a contract is required for the service offer, this element specifies how 
    '''many units of time the contract remains in effect (and the associated LengthRate 
    '''attribute specifies what that unit of time is; i.e., Days, Weeks, etc.). 
    ''' <BR/>Attributes: EarlyTermFee, LengthRate, Description 
    '''<BR/>use: Optional 
    '''<BR/>data type: Intger 
    '''<BR/>min/max occurs: 0-1 
    '''<BR/> minInclusive:  0 
    '''<BR/> maxInclusive:  999
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Contract: {_descriptionField} , terms {_termsField}")> _
    Public Class ContractType

        Private m_earlyTermFeeField As Decimal
        Private m_lengthRateField As ContractLengthRateEnum
        Private m_valueField As Integer
        ' 8/2007 jwg added for G2B 4.1
        Private m_descriptionField As String
        Private m_termsField As String

        ''' <summary>
        '''The dollar amount charged if the consumer terminates the contract early. 
        '''<BR/> minInclusive:  0 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property EarlyTermFee() As Decimal
            Get
                Return Me.m_earlyTermFeeField
            End Get
            Set(ByVal value As Decimal)
                Me.m_earlyTermFeeField = value
            End Set
        End Property

        ''' <summary>
        '''LengthRate <BR/>
        '''If a contract is required for the service offer, this attribute specifies how often the Contract element is incurred. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''enumeration: Days, Weeks, Months, Years
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LengthRate() As ContractLengthRateEnum
            Get
                Return Me.m_lengthRateField
            End Get
            Set(ByVal value As ContractLengthRateEnum)
                Me.m_lengthRateField = value
            End Set
        End Property

        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As Integer
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As Integer)
                Me.m_valueField = value
            End Set
        End Property

        ''' <summary>
        ''' Description for the consumer of this contract
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description() As String
            Get
                Return m_descriptionField
            End Get
            Set(ByVal value As String)
                m_descriptionField = value
            End Set
        End Property

        ''' <summary>
        '''TermsAndConditions  <BR/>
        '''Allows the MSO to provide Terms and Conditions text associated with service offers. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-5000
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TermsAndConditions() As String
            Get
                Return m_termsField
            End Get
            Set(ByVal value As String)
                m_termsField = value
            End Set
        End Property
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
        Public Sub New(ByVal earlyTermFee As Decimal, _
            ByVal lengthRate As ContractLengthRateEnum, _
            ByVal value As Integer)

            Me.EarlyTermFee = earlyTermFee
            Me.LengthRate = lengthRate
            Me.Value = value
        End Sub

        Public Sub New(ByVal earlyTermFee As Decimal, _
            ByVal lengthRate As ContractLengthRateEnum, _
            ByVal value As Integer, _
            ByVal description As String, _
            ByVal terms As String)

            Me.new(earlyTermFee, lengthRate, value)
            Me.m_descriptionField = description
            Me.m_termsField = terms
        End Sub

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)

            Try
                sb.Append("<BR/>Contract Description: " & Utility.DefaultString(Me.m_descriptionField) & _
                        "<BR/>Contract Type: Early Term Fee: " & _
                        Me.EarlyTermFee.ToString() & _
                        " Length: " & Me.LengthRate.ToString() & _
                        " Value:" & Me.Value.ToString() & "<BR/>" & _
                        " Terms:" & Me.m_termsField.ToString() & "<BR/>")

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

    End Class

    Public Enum ContractLengthRateEnum

        m_Days
        m_Weeks
        m_Months
        m_Years
    End Enum

    ''' <summary>
    ''' Provides the consumer's credit card info to the MSO.<BR/>
    ''' If the Affiliate's business deal with the MSO requires collecting
    ''' credit card information.
    ''' <BR/>Elements: Name, Number, Expiration, Security Code, BillingFullName,
    ''' BillingPhone, BillingAddress
    ''' <BR/>use: Optional
    ''' <br/>min/max occurs: 0-1
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("CreditCardType: {_nameField} exp {_expirationField} Name {_billingFullNameField}")> _
    Public Class CreditCardType

        Private m_nameField As CreditCardEnum
        Private m_numberField As String
        Private m_expirationField As String
        Private m_securityCodeField As String
        Private m_billingFullNameField As String
        Private m_billingPhoneField As String
        Private m_billingAddressField As Address

        ''' <summary>
        '''Name <BR/>
        '''The issuer of the credit card; e.g., MasterCard, Visa, etc. <BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>enumeration: Amex, Diners, Discover, MC, Visa
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name() As CreditCardEnum
            Get
                Return Me.m_nameField
            End Get
            Set(ByVal value As CreditCardEnum)
                Me.m_nameField = value
            End Set
        End Property

        ''' <summary>
        '''Number <BR/>
        '''In the CreditCard element, Number specifies the consumer's credit card number. 
        ''' <BR/>Elements: Min, Max, Required 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: ^4\d{15}$ 
        '''<BR/>^5[1-5]\d{14}$ 
        '''<BR/>^6011\d{12}$ 
        '''<BR/>^3[4,7]\d{13}$ 
        '''<BR/>^3[0,6,8]\d{12}$
        '''<BR/>Accepts valid card numbers for American Express, Diner's Club, Discover, MasterCard, and Visa. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Number() As String
            Get
                Return Me.m_numberField
            End Get
            Set(ByVal value As String)
                Me.m_numberField = value
            End Set
        End Property

        ''' <summary>
        '''Expiration <BR/>
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-30
        '''<BR/>Some MSO systems apply additional restrictions to customer data. For 
        '''example, Time Warner will reject the order if any special characters appear in the first name or 
        '''last name fields. It may be advisable to check with specific MSOs for additional data 
        '''requirements or restrictions. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Expiration() As String
            Get
                Return Me.m_expirationField
            End Get
            Set(ByVal value As String)
                Me.m_expirationField = value
            End Set
        End Property

        ''' <summary>
        '''SecurityCode  <BR/>
        '''The 3- or 4-digit code on the credit card. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>format: \d{3}\d?
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SecurityCode() As String
            Get
                Return Me.m_securityCodeField
            End Get
            Set(ByVal value As String)
                Me.m_securityCodeField = value
            End Set
        End Property

        ''' <summary>
        '''BillingFullName  <BR/>
        '''The consumer's name exactly as it appears on the credit card, (e.g., with middle initial, Jr, Sr, III, etc.). 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-50
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property BillingFullName() As String
            Get
                Return Me.m_billingFullNameField
            End Get
            Set(ByVal value As String)
                Me.m_billingFullNameField = value
            End Set
        End Property

        ''' <summary>
        '''BillingPhone  <BR/>
        '''The consumer's telephone number that the credit card company has on file. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>format: \d{10}
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property BillingPhone() As String
            Get
                Return Me.m_billingPhoneField
            End Get
            Set(ByVal value As String)
                Me.m_billingPhoneField = value
            End Set
        End Property

        ''' <summary>
        ''' BillingAddress  <BR/>
        '''The address associated with the consumer's credit card, if different from their service 
        '''address; e.g., a P.O. Box. 
        ''' <BR/>Elements: AddressLine, Suite, City, State, Zip, Zip4 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-1 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property BillingAddress() As Address
            Get
                Return Me.m_billingAddressField
            End Get
            Set(ByVal value As Address)
                Me.m_billingAddressField = value
            End Set
        End Property

        Public Sub New(ByVal name As CreditCardEnum, ByVal number As String, ByVal expiration As String, ByVal securityCode As String, ByVal billingFullName As String, ByVal billingPhone As String, ByVal billingAddress As Address)
            Me.m_nameField = name
            Me.m_numberField = number
            Me.m_expirationField = expiration
            Me.m_securityCodeField = securityCode
            Me.m_billingFullNameField = billingFullName
            Me.m_billingPhoneField = billingPhone
            Me.m_billingAddressField = billingAddress
        End Sub
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
    End Class

    Public Enum CreditCardEnum

        m_Visa
        m_MC
        m_Amex
        m_Discover
        m_Diners
    End Enum

    ''' <summary>
    ''' The dollar amount charged for a service offering or the dollar amount charged for a Customization. An associated Frequency attribute specifies how often the Price will occur.
    ''' <BR/>Attributes: Frequency, Description, Display
    ''' <BR/>use: Required
    ''' <BR/>data type: Decimal
    ''' <BR/>min/max occurs: 1-1
    ''' <BR/>format: 10, including 2 fractional digits
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Customizable Price: {_descriptionField}, {_valueField.ToString()}/{_frequencyField.ToString()} ")> _
    Public Class CustomizablePriceType

        Private m_frequencyField As PriceFrequencyEnum
        Private m_descriptionField As String
        Private m_valueField As String

        ' 8/2007 jwg added for G2B 4.1
        Private m_displayField As Boolean
        Private m_displayFieldSpecified As Boolean

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Customizable Price Type")

                sb.Append("<BR/>Description : " & Utility.DefaultString(m_descriptionField))
                sb.Append("<BR/>Frequency : " & m_frequencyField.ToString())
                sb.Append("<BR/>Value : " & Utility.DefaultString(m_valueField))
                sb.Append("<BR/>Display : " & m_displayField.ToString())
                sb.Append("<BR/>Display Specified : " & m_displayFieldSpecified.ToString())

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function
        ''' <summary>
        '''Frequency <BR/>
        '''Specifies how often the consumer is charged, or receives, each element listed in the "Used By" 
        '''column. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''enumeration: Once, Monthly
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Frequency() As PriceFrequencyEnum
            Get
                Return Me.m_frequencyField
            End Get
            Set(ByVal value As PriceFrequencyEnum)
                Me.m_frequencyField = value
            End Set
        End Property

        ''' <summary>
        ''' Description for the customer of this Customization Price
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description() As String
            Get
                Return Me.m_descriptionField
            End Get
            Set(ByVal value As String)
                Me.m_descriptionField = value
            End Set
        End Property

        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As String
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As String)
                Me.m_valueField = value
            End Set
        End Property

        ''' <summary>
        ''' Indicates if the price field is to be displayed to the consumer
        ''' <BR/>use: optional
        ''' <BR/>data type: boolean
        ''' <br/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DisplayField() As Boolean
            Get
                Return m_displayField
            End Get
            Set(ByVal value As Boolean)
                m_displayField = value
            End Set
        End Property

        Public Property DisplayFieldSpecified() As Boolean
            Get
                Return m_displayFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_displayFieldSpecified = value
            End Set
        End Property

        Public Sub New(ByVal frequency As PriceFrequencyEnum, ByVal description As String, ByVal value As String)
            Me.Frequency = frequency
            Me.Description = description
            Me.Value = value
        End Sub
        Public Sub New(ByVal frequency As PriceFrequencyEnum, _
            ByVal description As String, _
            ByVal value As String, _
            ByVal pblndisplay As Boolean, _
            ByVal pblndisplaySpecified As Boolean)
            Me.Frequency = frequency
            Me.Description = description
            Me.Value = value
            Me.m_displayField = pblndisplay
            Me.m_displayFieldSpecified = pblndisplaySpecified

        End Sub
    End Class

    Public Enum CustomizationCategoryEnum
        m_Premium
        m_Installation
        m_Software
        m_HDUpgrade
        m_DataEquipment

        m_DataFeature
        m_VoiceEquipment
        m_VoiceFeature
        m_VideoEquipment
        m_VideoFeature

        m_Other
        m_Deposit
    End Enum

    ''' <summary>
    '''Customization  <BR/>
    '''The set of elements that comprise additional service choices that allow the consumer to 
    '''tailor a service offer to suit their needs. 
    ''' <BR/>Elements: Selection, Text, Number 
    ''' <BR/>Attributes: 
    '''CustomizationID, Name, Category 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-20 
    '''<BR/>Elements: Name, Number, Expiration, SecurityCode, BillingFullName, BillingPhone, BillingAddress 
    '''<BR/>data type: String 
    ''' <BR/>Attributes: AuthFieldID, Name, Private, Boolean, MaxLen, Description 
    ''' <BR/>
    '''Sub-Elements: 
    '''NewCustomer, ExistingCustomer 
    '''<BR/>data type: n/a 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Customization/QueryOffers: {_nameField}, id={_customizationIDField} , {_itemsField.Length} items")> _
    Public Class CustomizationTypeQueryOffers

        Private m_itemsField() As Object
        Private m_customizationIDField As String
        Private m_nameField As String
        Private m_categoryField As CustomizationCategoryEnum
        Private m_descriptionField As String

        ' 8/2007 jwg chgs for g2b 4.1
        ''' <summary>
        ''' Dictionary of integer Items.  
        ''' </summary>
        ''' <remarks>First Integer (key)
        ''' holds the position of this Item in the original
        ''' list returned from the G2B Web Service
        ''' <p>Value of type Integer is the raw data for
        ''' this customization</p></remarks>
        Private m_intItems As Dictionary(Of Integer, Integer)

        ''' <summary>
        ''' Dictionary of SelectionTypeorder Items.  
        ''' </summary>
        ''' <remarks>First Integer (key)
        ''' holds the position of this Item in the original
        ''' list returned from the G2B Web Service
        ''' <p>Value of type SelectionTypeOrder is the raw data for
        ''' this customization</p></remarks>
        Private m_SelTypeItems As Dictionary(Of Integer, SelectionType)

        ''' <summary>
        ''' Dictionary of input text Items.  
        ''' </summary>
        ''' <remarks>First Integer (key)
        ''' holds the position of this Item in the original
        ''' list returned from the G2B Web Service
        ''' <p>Value of type InputTextType is the raw data for
        ''' this customization</p></remarks>
        Private m_InputTextItems As Dictionary(Of Integer, InputTextType)
        ''' <summary>
        ''' Dictionary of input text Items.  
        ''' </summary>
        ''' <remarks>First Integer (key)
        ''' holds the position of this Item in the original
        ''' list returned from the G2B Web Service
        ''' <p>Value of type InputTextNumberType is the raw data for
        ''' this customization</p></remarks>
        Private m_InputNumberItems As Dictionary(Of Integer, InputNumberType)

        Public Overrides Function ToString() As String
            Dim sbTemp As New StringBuilder(1000)

            Try

                sbTemp.Append("<BR/><B>Customizations</B><BR/>")
                sbTemp.Append("<table><tr><td>Customization ID: " & Me.CustomizationID.ToString() & _
                            "</td><td>Name: " & Utility.DefaultString(Me.Name) & _
                            "</td></tr><tr><td>Description: " & Utility.DefaultString(Me.Description) & _
                            "</td><td>Category: " + Me.Category.ToString() & _
                            "</td></tr></table>")

                sbTemp.Append("<BR/>")
                Return sbTemp.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sbTemp.ToString()
            End Try
        End Function

        Public Property IntItems() As Dictionary(Of Integer, Integer)
            Get
                Return m_intItems
            End Get
            Set(ByVal value As Dictionary(Of Integer, Integer))
                m_intItems = value
            End Set
        End Property

        Public Property SelTypeItems() As Dictionary(Of Integer, SelectionType)
            Get
                Return m_SelTypeItems
            End Get
            Set(ByVal value As Dictionary(Of Integer, SelectionType))
                m_SelTypeItems = value
            End Set
        End Property

        Public Property InputTextItems() As Dictionary(Of Integer, InputTextType)
            Get
                Return m_InputTextItems
            End Get
            Set(ByVal value As Dictionary(Of Integer, InputTextType))
                m_InputTextItems = value
            End Set
        End Property

        Public Property InputNumberItems() As Dictionary(Of Integer, InputNumberType)
            Get
                Return m_InputNumberItems
            End Get
            Set(ByVal value As Dictionary(Of Integer, InputNumberType))
                m_InputNumberItems = value
            End Set
        End Property

        'Public Property Items() As Object()
        '    Get
        '        Return Me.itemsField
        '    End Get
        '    Set(ByVal value As Object())
        '        Me.itemsField = value
        '    End Set
        'End Property

        ''' <summary>
        '''CustomizationID  <BR/>
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CustomizationID() As String
            Get
                Return Me.m_customizationIDField
            End Get
            Set(ByVal value As String)
                Me.m_customizationIDField = value
            End Set
        End Property

        ''' <summary>
        '''Name 
        '''Indicates the Name of the custom field defined by the MSO to collect additional Authentication information. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name() As String
            Get
                Return Me.m_nameField
            End Get
            Set(ByVal value As String)
                Me.m_nameField = value
            End Set
        End Property

        ''' <summary>
        '''Category  <BR/>
        '''G2B uses a Category element and two Category attributes. 
        '''As an attribute in the Offers messages, Category identifies the type of items contained 
        '''in: <BR/>
        '''- A Customization <BR/>
        '''- A listing of features/items included in the base price of a service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''enumeration: 
        ''' 'Premium',  'Installation',  'Software',  'HDUpgrade',  'DataEquipment',  'DataFeature',  'VoiceEquipment',  'VoiceFeature',  'VideoEquipment',  'VideoFeature',  'Other', 'Deposit'
        '''
        '''The Affiliate Site may use the Category attribute in the Customization element to filter out 
        '''MSO equipment (e.g., modems) or services (e.g., professional installation), if the equipment/service 
        '''competes with some component of the Affiliate's business. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Category() As CustomizationCategoryEnum
            Get
                Return Me.m_categoryField
            End Get
            Set(ByVal value As CustomizationCategoryEnum)
                Me.m_categoryField = value
            End Set
        End Property

        ''' <summary>
        ''' Description for the customer of this Customization
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description() As String
            Get
                Return Me.m_descriptionField
            End Get
            Set(ByVal value As String)
                Me.m_descriptionField = value
            End Set
        End Property

        Public Sub New(ByVal customizationID As String, _
            ByVal name As String, _
            ByVal category As CustomizationCategoryEnum, _
            ByVal description As String)

            '            Me.Items = items
            Me.CustomizationID = customizationID
            Me.Name = name
            Me.Category = category
            Me.Description = description
        End Sub
    End Class

    ''' <summary>
    ''' Define the Data access Speed portion of a Data offer
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("DataSpeed: Unit={_unitField.ToString()}, value={_valueField.ToString()}")> _
    Public Class DataSpeedType

        Private m_unitField As DataRateEnum
        ' 8/2007 jwg chg for g2b v4.1
        Private m_valueField As Decimal

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(100)

            Try
                sb.Append("<BR/>Data Speed Type Unit : " & Me.Unit.ToString() & _
                        "<BR/>Value: " & Me.Value.ToString())

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''Unit  <BR/>
        '''The Unit attribute is used two ways. It specifies the measure of computer data storage capacity for a DataOffer. 
        '''The Unit attribute is also used to specify data transfer speed. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>enumeration: GB, MB
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Unit() As DataRateEnum
            Get
                Return Me.m_unitField
            End Get
            Set(ByVal value As DataRateEnum)
                Me.m_unitField = value
            End Set
        End Property
        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As Decimal
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As Decimal)
                Me.m_valueField = value
            End Set
        End Property
    End Class

    Public Enum DataRateEnum

        m_Kbps

        m_Mbps
    End Enum

    ''' <summary>
    ''' Define the disk space portion of a Data offer
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("DiskSpace: value={_valueField.ToString()} unit={_unitField.ToString()}")> _
    Public Class DiskSpaceType

        Private m_unitField As DiskSpaceEnum
        ' 8/2007 jwg chg for 4.1
        Private m_valueField As Decimal

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(100)
            Try
                sb.Append("<BR/>Disk Space : " & Me.Value.ToString() & _
                            " Units(" & Me.Unit.ToString & ")")
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''Unit  <BR/>
        '''The Unit attribute is used two ways. 
        '''<BR/>It specifies the measure of bandwidth (the amount of data that can flow in a given time) for 
        '''a DataOffer. 
        '''<BR/>The Unit attribute is also used to specify data storage
        ''' <BR/>use: Required 
        '''<BR/>data type: String enumeration: Kbps, Mbps
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Unit() As DiskSpaceEnum
            Get
                Return Me.m_unitField
            End Get
            Set(ByVal value As DiskSpaceEnum)
                Me.m_unitField = value
            End Set
        End Property

        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As Decimal
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As Decimal)
                Me.m_valueField = value
            End Set
        End Property
    End Class

    Public Enum DiskSpaceEnum

        m_MB

        m_GB
    End Enum

    <Serializable()> _
    <DebuggerDisplay("Detail: Included {_includedField.ToString()}, Value {_valueField}")> _
    Public Class DetailType

        Private m_includedField As Boolean
        Private m_valueField As String

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Detail Type")
                sb.Append("<BR/>Included? : " & m_includedField)
                sb.Append("<BR/>Value: ")
                If (m_valueField IsNot Nothing) Then
                    sb.Append(m_valueField)
                End If

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''Included <BR/>
        '''Indicates if certain features are included in the base price of a WirelessVoiceOffer. 
        ''' <BR/>use: Required 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 1-5 
        '''<BR/>1 or true = feature included in the base price. 
        '''<BR/>0 or false = feature not included in the base price, and may not be offered by the MSO. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Included() As Boolean
            Get
                Return Me.m_includedField
            End Get
            Set(ByVal value As Boolean)
                Me.m_includedField = value
            End Set
        End Property
        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As String
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As String)
                Me.m_valueField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' Define a piece of Hardware
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Hardware: make={_makeField} , model {_modelfield}, value {_valueField.ToString()} ")> _
    Public Class HardwareType

        Private m_makeField As String
        Private m_modelField As String
        Private m_valueField As HardwareCategoryEnum

        Public Overrides Function ToString() As String
            Try
                Return "<BR/>Hardware Type: Make {" & _
                        Me.Make & "}, Model {" & _
                        Me.Model & "}, Type {" & _
                        Me.Value.ToString() & "}<BR/>"
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return "Hardware Type"
            End Try

        End Function

        ''' <summary>
        '''Make <BR/>
        '''The equipment manufacturer(s) of supported hardware for a specific offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Make() As String
            Get
                Return Me.m_makeField
            End Get
            Set(ByVal value As String)
                Me.m_makeField = value
            End Set
        End Property

        ''' <summary>
        '''Model <BR/>
        '''The model(s) of supported hardware for an Offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Model() As String
            Get
                Return Me.m_modelField
            End Get
            Set(ByVal value As String)
                Me.m_modelField = value
            End Set
        End Property

        ''' <summary>
        ''' Specify the HardwareCategory for this Hardware item
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As HardwareCategoryEnum
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As HardwareCategoryEnum)
                Me.m_valueField = value
            End Set
        End Property

        Public Sub New(ByVal make As String, ByVal model As String, ByVal value As HardwareCategoryEnum)
            Me.Make = make
            Me.Model = model
            Me.Value = value
        End Sub
    End Class

    Public Enum HardwareCategoryEnum
        m_CableCARD
        m_SetTopBox
        m_HDSetTopBox
        m_DVRSetTopBox
        m_CableModem

        m_VoiceModem
        m_HDDVRSetTopBox
        m_MobilePhone
    End Enum

    ''' <summary>
    ''' Define an input field to accept a Number entry from the customer
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Input Number Type: min={_minField.ToString()} , max {_maxField.ToString()}, required {_requiredField.ToString()} ")> _
    Public Class InputNumberType

        Private m_minField As Integer
        Private m_maxField As Integer
        Private m_requiredField As Boolean

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Input Number Type")

                sb.Append("<BR/>Required? " & m_requiredField.ToString() & _
                        ", Min: " & m_minField.ToString() & ", Max: " & _
                        m_maxField.ToString())
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function
        ''' <summary>
        '''Min <BR/>
        '''The Min attribute is used in two ways. When used in the Number 
        '''element, it specifies the lowest numeric value that the consumer can enter for the applicable Customization. 
        '''Min is also used in the Selection element. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  999
        '''<BR/>The Affiliate Site should not allow the consumer to enter a number less than the applicable Min.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Min() As Integer
            Get
                Return Me.m_minField
            End Get
            Set(ByVal value As Integer)
                Me.m_minField = value
            End Set
        End Property

        ''' <summary>
        '''Max <BR/>
        '''The Max attribute is used in two ways. When used in the Number element, it Indicates the highest numeric value 
        '''that the consumer can enter for the applicable Customization. 
        '''Max is also used in the Selection element (see next row). 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  999
        '''<BR/>The Affiliate Site should not allow the consumer to enter a number greater than the applicable Max. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Max() As Integer
            Get
                Return Me.m_maxField
            End Get
            Set(ByVal value As Integer)
                Me.m_maxField = value
            End Set
        End Property

        ''' <summary>
        '''Required  <BR/>
        '''Indicates if the consumer must respond to a Customization/Text or 
        '''Customization/Number. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean 
        '''<BR/>format: xs: boolean
        '''<BR/>If 1 or true, the Affiliate Site should require the consumer to enter data and the Affiliate should include that 
        '''information in the applicable Customization element in the SubmitOrder message. 
        '''<BR/>If 0 or false, and the consumer makes no entry, the Affiliate Site should omit the applicable 
        '''Customization element in the SubmitOrder message.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Required() As Boolean
            Get
                Return Me.m_requiredField
            End Get
            Set(ByVal value As Boolean)
                Me.m_requiredField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' The set of elements that comprise a listing of features or components that are part of the base price of a service offer.
    ''' <BR/>Elements: Item
    ''' <BR/>Attributes: Name, Category
    ''' <BR/>use: Optional
    ''' <BR/>data type: n/a
    ''' <BR/>min/max occurs: 0-5
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Included Items: {_nameField} , {_itemField.Length} Items, Category {Category.ToString()}")> _
    Public Class IncludedItemsType

        Private m_itemField() As String
        Private m_nameField As String

        Private m_categoryField As CustomizationCategoryEnum
        Public Overrides Function ToString() As String
            Dim sbTemp As New StringBuilder(1000)

            Try
                sbTemp.Append("<BR/><B>Included Items</B><BR/>")
                sbTemp.Append(Me.Name + "<BR/>" + _
                            "Category: " + Me.Category.ToString())

                For iItem As Integer = 0 To Me.Item.Length - 1
                    sbTemp.Append("<BR/>" + Me.Item(iItem).ToString())
                Next iItem

                sbTemp.Append("<BR/>")
                Return sbTemp.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sbTemp.ToString()
            End Try

        End Function

        ''' <summary>
        '''Item <BR/>
        '''An individual entry in the IncludedItems element that specifies a feature or a component included in the base 
        '''price of the service offer. 
        ''' <BR/>Attributes: ItemID 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-20 
        '''<BR/>min/max length: 1-50 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Item() As String()
            Get
                Return Me.m_itemField
            End Get
            Set(ByVal value As String())
                Me.m_itemField = value
            End Set
        End Property

        ''' <summary>
        ''' Description for the customer of this included item
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name() As String
            Get
                Return Me.m_nameField
            End Get
            Set(ByVal value As String)
                Me.m_nameField = value
            End Set
        End Property
        ''' <summary>
        '''Category  <BR/>
        '''G2B uses a Category element and two Category attributes. 
        '''As an attribute in the Offers messages, Category identifies the type of items contained 
        '''in: <BR/>
        '''- A Customization <BR/>
        '''- A listing of features/items included in the base price of a service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''enumeration: 
        ''' 'Premium',  'Installation',  'Software',  'HDUpgrade',  'DataEquipment',  'DataFeature',  'VoiceEquipment',  'VoiceFeature',  'VideoEquipment',  'VideoFeature',  'Other', 'Deposit'
        '''
        '''The Affiliate Site may use the Category attribute in the Customization element to filter out 
        '''MSO equipment (e.g., modems) or services (e.g., professional installation), if the equipment/service 
        '''competes with some component of the Affiliate's business. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Category() As CustomizationCategoryEnum
            Get
                Return Me.m_categoryField
            End Get
            Set(ByVal value As CustomizationCategoryEnum)
                Me.m_categoryField = value
            End Set
        End Property

        Public Sub New(ByVal item() As String, ByVal name As String, ByVal category As CustomizationCategoryEnum)
            Me.Item() = item
            Me.Name = name
            Me.Category = category
        End Sub
    End Class
    ''' <summary>
    ''' Input Text field from an Order message
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Input Text Order: id={_textIDField} , value {_valueField}")> _
    Public Class InputTextTypeOrder
        Private m_textIDField As Integer
        Private m_valueField As String

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
        Public Sub New(ByVal pTextID As Integer, ByVal pValue As String)
            m_textIDField = pTextID
            m_valueField = pValue
        End Sub
        ''' <summary>
        '''TextID  <BR/>
        '''The TextID attribute allows an MSO to associate an identification number with a text customization field. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        <System.Xml.Serialization.XmlAttributeAttribute()> _
        Public Property TextID() As String
            Get
                Return m_textIDField
            End Get
            Set(ByVal value As String)
                m_textIDField = value
            End Set
        End Property

        <System.Xml.Serialization.XmlTextAttribute()> _
        Public Property Value() As String
            Get
                Return m_valueField
            End Get
            Set(ByVal value As String)
                m_valueField = value
            End Set
        End Property

        Public Overrides Function ToString() As String
            Return "<BR/>InputTextTypeOrder<BR/>" & _
                    "ID: " & m_textIDField & "<BR/>" & _
                    "Value: " & m_valueField
        End Function
    End Class
    ''' <summary>
    ''' Define an input field to accept Text from the customer
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Input Text: id={_textIDField} , label {_labelField}, Required {_requiredField}, Max Len={_maxLenField}")> _
    Public Class InputTextType

        Private m_maxLenField As Integer
        Private m_requiredField As Boolean
        Private m_labelField As String
        ' 8/2007 jwg added for G2B 4.1
        Private m_textIDField As String

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Input Text Type")
                sb.Append("<BR/>Label : " & Utility.DefaultString(m_labelField) & _
                            ", Required : " & m_requiredField.ToString() & _
                            ", Text ID : " & Utility.DefaultString(m_textIDField) & _
                            ", Max Len : " & m_maxLenField.ToString())
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''MaxLen <BR/>
        '''The length of the Text element in the applicable Customization. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/> minInclusive:  1 
        '''<BR/> maxInclusive:  100
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MaxLen() As Integer
            Get
                Return Me.m_maxLenField
            End Get
            Set(ByVal value As Integer)
                Me.m_maxLenField = value
            End Set
        End Property

        ''' <summary>
        '''Required  <BR/>
        '''Indicates if the consumer must respond to a Customization/Text or 
        '''Customization/Number. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean 
        '''<BR/>format: xs: boolean
        '''<BR/>If 1 or true, the Affiliate Site should require the consumer to enter data and the Affiliate should include that 
        '''information in the applicable Customization element in the SubmitOrder message. 
        '''<BR/>If 0 or false, and the consumer makes no entry, the Affiliate Site should omit the applicable 
        '''Customization element in the SubmitOrder message.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Required() As Boolean
            Get
                Return Me.m_requiredField
            End Get
            Set(ByVal value As Boolean)
                Me.m_requiredField = value
            End Set
        End Property

        ''' <summary>
        '''Label <BR/>
        '''The text that will display on the screen next to a text entry field. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-50
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Label() As String
            Get
                Return Me.m_labelField
            End Get
            Set(ByVal value As String)
                Me.m_labelField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''MarketingInfo <BR/>
    '''Describes all the service offer advantages and features. 
    ''' <BR/>Elements: Main, Bullet 
    ''' <BR/>
    '''Note: For data conversion from a v3.0 MSO, the MarketingInfo element itself may 
    '''contain up to 2000 characters of text. (Main and Bullet elements do not exist for a v3.0 MSO) 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-1 
    ''' <BR/>
    '''The MarketingInfo element is the primary sales message to the consumer. 
    '''The associated Main and Bullet elements should be written clearly and concisely. Avoid acronyms and 
    '''industry jargon. HTML tags for Italics, Bold, and Line Feed may be included in this 
    '''element. The Affiliate Site should either exclude or apply the HTML tags. 
    '''In the case where the responding MSO has not yet upgraded to v.4.1, their v3.0 MARKETING_COMMENTS data can be found 
    '''within the MarketingInfo element. In this case, the Main and Bullet elements do not exist. 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("MarketingInfo: {_mainField} , {_bulletField.Length} Bullets,  {_textField.Length} Text Items")> _
    Public Class MarketingInfoType

        Private m_mainField As String
        Private m_bulletField() As String
        Private m_textField() As String

        Public Overrides Function ToString() As String
            Dim sbTemp As New StringBuilder(1000)

            Try
                sbTemp.Append("<BR/><B>G2B Marketing Info</B>")
                sbTemp.Append("<BR/>" & Me.m_mainField & _
                                "<BR/>Bullets:")

                For iItem As Integer = 0 To Me.m_bulletField.Length - 1
                    sbTemp.Append("<BR/>" + Me.m_bulletField(iItem).ToString())
                Next iItem
                sbTemp.Append("<BR/>Text:")
                For iItem As Integer = 0 To Me.m_textField.Length - 1
                    sbTemp.Append("<BR/>" + Me.m_textField(iItem).ToString())
                Next iItem

                sbTemp.Append("<BR/>")
                Return sbTemp.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sbTemp.ToString()
            End Try
        End Function
        ''' <summary>
        '''Main <BR/>
        '''Used in conjunction with Bullet to compose the MarketingInfo element, this element contains 
        '''marketing verbiage describing service offer features. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-300 
        ''' <BR/>
        '''The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms 
        '''and industry jargon. HTML tags for Italics, Bold, and Line Feed may be included in this 
        '''element. The Affiliate Site should either exclude or apply the HTML tags. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Main() As String
            Get
                Return Me.m_mainField
            End Get
            Set(ByVal value As String)
                Me.m_mainField = value
            End Set
        End Property

        ''' <summary>
        '''Bullet  <BR/>
        '''Used in conjunction with the Main element to compose the 
        '''MarketingInfo element, this element allows the MSO to create short 
        '''lines of bulleted text marketing the service offer features. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-10 
        '''
        '''<BR/>min/max length: 1-150 
        ''' 
        '''The consumer will read this verbiage. The MSO should write It clearly and 
        '''concisely, avoiding acronyms and industry jargon. The Affiliate Site should display the 
        '''MarketingInfo Bullets in their original sequence under the MarketingInfo 
        '''Main element. HTML tags for Italics and Bold may be included in this element. The 
        '''Affiliate Site should either exclude or apply the HTML tags. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Bullet() As String()
            Get
                Return Me.m_bulletField
            End Get
            Set(ByVal value As String())
                Me.m_bulletField = value
            End Set
        End Property

        ''' <summary>
        '''Text <BR/>
        '''The Text element is used two ways. 
        '''<BR/>For the Affiliate, this element contains the consumer-entered text based on the MSO's specifications for a 
        '''Customization. 
        ''' <BR/>Attributes: MaxLen, Required, Label, TextID 
        '''<BR/>use: Required 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 1-10 
        '''<BR/>min/max length: 1-100 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Text() As String()
            Get
                Return Me.m_textField
            End Get
            Set(ByVal value As String())
                Me.m_textField = value
            End Set
        End Property

        Public Sub New(ByVal main As String, ByVal bullet() As String, ByVal text() As String)
            Me.Main = main
            Me.Bullet = bullet
            Me.Text = text
        End Sub
    End Class

    ''' <summary>
    ''' The set of elements that comprise the service offer identifiers and consumer specifics for the ordered service.
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Offer Type: id={OfferID} , short name {ShortName} ")> _
    Public Class OfferType

        Private m_shortNameField As String
        Private m_mediumNameField As String
        Private m_longNameField As String
        Private m_priceField As PriceType
        Private m_installPriceField As CustomizablePriceType
        Private m_hardwarePriceField As CustomizablePriceType
        Private m_depositPriceField As CustomizablePriceType
        Private m_promotionField() As PromotionType
        Private m_qualifiedHardwareField() As HardwareType
        Private m_customizationField() As CustomizationTypeQueryOffers
        Private m_includedItemsField() As IncludedItemsType
        Private m_marketingInfoField As MarketingInfoType
        Private m_contractField As ContractType
        Private m_techSupportField As String
        Private m_disclaimerField As String
        Private m_offerIDField As String
        Private m_versionField As Decimal
        ' 8/2007 jwg added for g2b v4.1
        Private m_termsAndConditionsField As String
        Private m_movesOfferField As Boolean
        Private m_movesOfferFieldSpecified As Boolean

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>OfferType")
                sb.Append("<BR/> Short Name: " & Utility.DefaultString(m_shortNameField))
                sb.Append("<BR/> Medium Name: " & Utility.DefaultString(m_mediumNameField))
                sb.Append("<BR/> long Name: " & Utility.DefaultString(m_longNameField))

                If (m_priceField IsNot Nothing) Then
                    sb.Append("<BR/> Price: " & m_priceField.ToString())
                End If

                If (m_installPriceField IsNot Nothing) Then
                    sb.Append("<BR/> Install Price: " & m_installPriceField.ToString())
                End If

                If (m_hardwarePriceField IsNot Nothing) Then
                    sb.Append("<BR/> Hardware Price: " & m_hardwarePriceField.ToString())
                End If

                If (m_depositPriceField IsNot Nothing) Then
                    sb.Append("<BR/> Deposit Price: " & m_depositPriceField.ToString())
                End If

                If (m_promotionField IsNot Nothing) Then
                    For iItem As Integer = 0 To m_promotionField.Length - 1
                        sb.Append("<BR/> Promo: " & m_promotionField(iItem).ToString())
                    Next
                End If

                If (m_qualifiedHardwareField IsNot Nothing) Then
                    For iItem As Integer = 0 To m_qualifiedHardwareField.Length - 1
                        sb.Append("<BR/> Qualified Hardware: " & m_qualifiedHardwareField(iItem).ToString())
                    Next
                End If

                If (m_customizationField IsNot Nothing) Then
                    For iItem As Integer = 0 To m_customizationField.Length - 1
                        sb.Append("<BR/> Customization: " & m_customizationField(iItem).ToString())
                    Next
                End If

                If (m_includedItemsField IsNot Nothing) Then
                    For iItem As Integer = 0 To m_includedItemsField.Length - 1
                        sb.Append("<BR/> Included Items: " & m_includedItemsField(iItem).ToString())
                    Next
                End If

                If (m_marketingInfoField IsNot Nothing) Then
                    sb.Append("<BR/> Marketing Info: " & m_marketingInfoField.ToString())
                End If

                If (m_contractField IsNot Nothing) Then
                    sb.Append("<BR/> Contract: " & m_contractField.ToString())
                End If
                sb.Append("<BR/> Terms and conditions: " & Utility.DefaultString(m_termsAndConditionsField))
                sb.Append("<BR/> Tech Support: " & Utility.DefaultString(m_techSupportField))

                sb.Append("<BR/> Disclaimer: " & Utility.DefaultString(m_disclaimerField))
                sb.Append("<BR/> Offer ID: " & Utility.DefaultString(m_offerIDField))
                sb.Append("<BR/> Version: " & m_versionField.ToString())
                sb.Append("<BR/> Moves Offer: " & m_movesOfferField.ToString())
                sb.Append("<BR/> Moves Offer Specified: " & m_movesOfferFieldSpecified.ToString())

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''ShortName  <BR/>
        '''The briefest name for a service offer. See also, LongName and MediumName. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-50 
        '''<BR/>The consumer will read this verbiage.  The MSO should be clear and concise. Avoid acronyms and industry 
        '''jargon. The Affiliate Site should display only one of the three services offer Name elements (LongName, MediumName, ShortName) to the consumer.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ShortName() As String
            Get
                Return Me.m_shortNameField
            End Get
            Set(ByVal value As String)
                Me.m_shortNameField = value
            End Set
        End Property

        ''' <summary>
        '''MediumName <BR/>
        '''A brief, descriptive name for a service offer. See also, LongName and ShortName. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-100 
        '''<BR/>The consumer will read this verbiage. The MSO should write it clearly and concisely, avoiding acronyms and 
        '''industry jargon. The Affiliate Site should display only one of the three services offer Name 
        '''elements (LongName, MediumName, ShortName) to the consumer.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MediumName() As String
            Get
                Return Me.m_mediumNameField
            End Get
            Set(ByVal value As String)
                Me.m_mediumNameField = value
            End Set
        End Property

        ''' <summary>
        '''LongName <BR/>
        '''A descriptive name for a service offer. See also, MediumName and ShortName. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>min/max length: 1-200 
        '''<BR/>The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms and industry jargon. 
        '''The Affiliate Site should display only one of the three services offer Name elements (LongName, MediumName, ShortName) to the consumer.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property LongName() As String
            Get
                Return Me.m_longNameField
            End Get
            Set(ByVal value As String)
                Me.m_longNameField = value
            End Set
        End Property
        ''' <summary>
        '''Price <BR/>
        '''The dollar amount charged for a service offering or the dollar amount charged for a Customization. An associated Frequency attribute specifies how often the Price will occur. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits        
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Price() As PriceType
            Get
                Return Me.m_priceField
            End Get
            Set(ByVal value As PriceType)
                Me.m_priceField = value
            End Set
        End Property

        ''' <summary>
        '''InstallPrice <BR/>
        '''The dollar amount charged for professional installation of the hardware/software required to support the 
        '''service offer. There is an associated Frequency attribute that specifies how often the InstallPrice will occur. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits
        '''<BR/>
        '''If there is a fixed installation cost for an applicable service offer, the MSO should include that cost in the 
        '''InstallPrice element. If the MSO plans to provide installation options to the consumer, this element should contain the string 
        '''"customizable", and the MSO should include consumer choices in the Customization element. 
        '''If there is no installation cost, this element should contain 0 (zero). 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property InstallPrice() As CustomizablePriceType
            Get
                Return Me.m_installPriceField
            End Get
            Set(ByVal value As CustomizablePriceType)
                Me.m_installPriceField = value
            End Set
        End Property

        ''' <summary>
        '''HardwarePrice <BR/>
        '''The dollar amount charged for the specified hardware. An associated Frequency attribute specifies how 
        '''often the HardwarePrice will occur. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits 
        ''' <BR/>
        '''If there is a fixed hardware cost for an applicable service offer, the MSO 
        '''should include that cost in the HardwarePrice element. If the MSO plans to provide hardware 
        '''choices to the consumer, this element should contain the string "customizable", and the MSO should 
        '''include consumer choices in the Customization element. If there is no hardware cost, this 
        '''element should contain 0 (zero). 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property HardwarePrice() As CustomizablePriceType
            Get
                Return Me.m_hardwarePriceField
            End Get
            Set(ByVal value As CustomizablePriceType)
                Me.m_hardwarePriceField = value
            End Set
        End Property

        ''' <summary>
        '''Price <BR/>
        '''The dollar amount the consumer is required to pay prior to receiving service, if any. An associated Frequency attribute specifies how often the DepositPrice will occur. 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: 10, including 2 fractional digits        
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DepositPrice() As CustomizablePriceType
            Get
                Return Me.m_depositPriceField
            End Get
            Set(ByVal value As CustomizablePriceType)
                Me.m_depositPriceField = value
            End Set
        End Property

        ''' <summary>
        ''' List of Promotions available on an offer
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Promotion() As PromotionType()
            Get
                Return Me.m_promotionField
            End Get
            Set(ByVal value As PromotionType())
                Me.m_promotionField = value
            End Set
        End Property

        ''' <summary>
        '''QualifiedHardware <BR/>
        '''A list of supported equipment for a service offer. 
        '''<BR/>Attributes: Make, Model 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-20 
        '''<BR/>enumeration: CableCARD, CableModem, DVRSetTopBox, HDDVRSetTopBox, HDSetTopBox, MobilePhone, SetTopBox, VoiceModem
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property QualifiedHardware() As HardwareType()
            Get
                Return Me.m_qualifiedHardwareField
            End Get
            Set(ByVal value As HardwareType())
                Me.m_qualifiedHardwareField = value
            End Set
        End Property

        ''' <summary>
        ''' List of customization(s) on an offer
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Customization() As CustomizationTypeQueryOffers()
            Get
                Return Me.m_customizationField
            End Get
            Set(ByVal value As CustomizationTypeQueryOffers())
                Me.m_customizationField = value
            End Set
        End Property

        ''' <summary>
        '''IncludedItems <BR/>
        '''The set of elements that comprise a listing of features or components that are part of the base 
        '''price of a service offer. 
        ''' <BR/>Elements: Item 
        ''' <BR/>Attributes: Name, Category 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-5 
        '''<BR/>
        '''This element is composed of up to 20 individual Item elements. There can be up to five IncludedItems 
        '''elements in each of the Offer types; i.e., DataOffer, VideoOffer, VoiceOffer, WirelessVoiceOffer. 
        '''HTML tags for Italics, Bold, and Line'Feed may be included in this element. The Affiliate Site should 
        '''either exclude or apply the HTML tags. <BR/>
        '''An MSO may use this element to show that more features are included in the offer than are currently 
        '''supported by the G2B spec. For example, a voice offer might also 
        '''include the following features that are not represented as separate 
        '''elements by the G2B spec: 
        '''<BR/>
        '''<BR/>Includes3WayCalling 
        '''<BR/>Indicates if 3-way calling is included in the base price of a VoiceOffer or WirelessVoiceOffer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 0-1 
        ''' <BR/>1 or true = feature included 
        '''<BR/>IncludesCallerID 
        '''<BR/>Indicates if caller ID is included in the base price of a VoiceOffer or WirelessVoiceOffer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 0-1 
        ''' <BR/>1 or true = feature included 
        '''<BR/>IncludesCallerIDWithCallWaiting 
        '''<BR/>Indicates if caller ID for waiting calls is included in the base price of a VoiceOffer or WirelessVoiceOffer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 0-1 
        ''' <BR/>1 or true = feature included 
        '''<BR/>IncludesCallReturn 
        '''<BR/>Indicates if last call return is included in the base price of a VoiceOffer or WirelessVoiceOffer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 0-1 
        ''' <BR/>1 or true = feature included 
        '''<BR/>IncludesCallWaiting 
        '''<BR/>Indicates if call waiting is included in the base price of a VoiceOffer or WirelessVoiceOffer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        '''<BR/>min/max occurs: 0-1 
        ''' <BR/>1 or true = feature included 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property IncludedItems() As IncludedItemsType()
            Get
                Return Me.m_includedItemsField
            End Get
            Set(ByVal value As IncludedItemsType())
                Me.m_includedItemsField = value
            End Set
        End Property

        ''' <summary>
        '''MarketingInfo <BR/>
        '''Describes all the service offer advantages and features. 
        ''' <BR/>Elements: Main, Bullet 
        ''' <BR/>
        '''Note: For data conversion from a v3.0 MSO, the MarketingInfo element itself may 
        '''contain up to 2000 characters of text. (Main and Bullet elements do not exist for a v3.0 MSO) 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-1 
        ''' <BR/>
        '''The MarketingInfo element is the primary sales message to the consumer. 
        '''The associated Main and Bullet elements should be written clearly and concisely. Avoid acronyms and 
        '''industry jargon. HTML tags for Italics, Bold, and Line Feed may be included in this 
        '''element. The Affiliate Site should either exclude or apply the HTML tags. 
        '''In the case where the responding MSO has not yet upgraded to v.4.1, their v3.0 MARKETING_COMMENTS data can be found 
        '''within the MarketingInfo element. In this case, the Main and Bullet elements do not exist. 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property MarketingInfo() As MarketingInfoType
            Get
                Return Me.m_marketingInfoField
            End Get
            Set(ByVal value As MarketingInfoType)
                Me.m_marketingInfoField = value
            End Set
        End Property

        ''' <summary>
        '''Contract <BR/>
        '''If a contract is required for the service offer, this element specifies how 
        '''many units of time the contract remains in effect (and the associated LengthRate 
        '''attribute specifies what that unit of time is; i.e., Days, Weeks, etc.). 
        ''' <BR/>Attributes: EarlyTermFee, LengthRate, Description 
        '''<BR/>use: Optional 
        '''<BR/>data type: Intger 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  999
        ''' </summary>
        ''' <remarks></remarks>
        Public Property Contract() As ContractType
            Get
                Return Me.m_contractField
            End Get
            Set(ByVal value As ContractType)
                Me.m_contractField = value
            End Set
        End Property

        ''' <summary>
        '''TechSupport  <BR/>
        '''Describes the technical support provided by the MSO, if any. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-1000 
        '''<BR/>The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms and industry jargon.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TechSupport() As String
            Get
                Return Me.m_techSupportField
            End Get
            Set(ByVal value As String)
                Me.m_techSupportField = value
            End Set
        End Property

        ''' <summary>
        '''As an element, Disclaimer describes 
        '''the conditions, stipulations, and/or exclusions applicable to 
        '''the DataOffer, VideoOffer, VoiceOffer, or WirelessVoiceOffer. 
        '''<BR/>min/max length: 1-5000
        '''
        '''Disclaimer 
        '''<BR/>use: Optional 
        '''The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms and industry jargon.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Disclaimer() As String
            Get
                Return Me.m_disclaimerField
            End Get
            Set(ByVal value As String)
                Me.m_disclaimerField = value
            End Set
        End Property

        ''' <summary>
        '''OfferID <BR/>
        '''The MSO-assigned identifier for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property OfferID() As String
            Get
                Return Me.m_offerIDField
            End Get
            Set(ByVal value As String)
                Me.m_offerIDField = value
            End Set
        End Property
        ''' <summary>
        '''Version  <BR/>
        '''Specifies the MSO's edition number for the service offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Version() As Decimal
            Get
                Return Me.m_versionField
            End Get
            Set(ByVal value As Decimal)
                Me.m_versionField = value
            End Set
        End Property
        ''' <summary>
        '''TermsAndConditions  <BR/>
        '''Allows the MSO to provide Terms and Conditions text associated with service offers. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-5000
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property TermsAndConditions() As String
            Get
                Return m_termsAndConditionsField
            End Get
            Set(ByVal value As String)
                m_termsAndConditionsField = value
            End Set
        End Property

        ''' <summary>
        '''MovesOffer <BR/>
        '''This attribute of service offers allows an Offer to be 'flagged' as a Moves related Offer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Boolean 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MovesOffer() As Boolean
            Get
                Return m_movesOfferField
            End Get
            Set(ByVal value As Boolean)
                m_movesOfferField = value
            End Set
        End Property
        Public Property MovesOfferSpecified() As Boolean
            Get
                Return Me.m_movesOfferFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_movesOfferFieldSpecified = value
            End Set
        End Property
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
        Public Sub New(ByVal pshortName As String, ByVal pmediumName As String, _
            ByVal plongName As String, ByVal pprice As PriceType, _
            ByVal pinstallPrice As CustomizablePriceType, _
            ByVal phardwarePrice As CustomizablePriceType, _
            ByVal pdepositPrice As CustomizablePriceType, _
            ByVal ppromotion() As PromotionType, _
            ByVal pqualifiedHardware() As HardwareType, _
            ByVal pcustomization() As CustomizationTypeQueryOffers, _
            ByVal pincludedItems() As IncludedItemsType, _
            ByVal pmarketingInfo As MarketingInfoType, _
            ByVal pcontract As ContractType, _
            ByVal ptechSupport As String, _
            ByVal pdisclaimer As String, _
            ByVal pofferID As String, _
            ByVal pversion As Decimal)
            Me.ShortName = pshortName
            Me.MediumName = pmediumName
            Me.LongName = plongName
            Me.Price = pprice
            Me.InstallPrice = pinstallPrice
            Me.HardwarePrice = phardwarePrice
            Me.DepositPrice = pdepositPrice
            Me.Promotion = ppromotion
            Me.QualifiedHardware = pqualifiedHardware
            Me.Customization = pcustomization
            Me.IncludedItems = pincludedItems
            Me.MarketingInfo = pmarketingInfo
            Me.Contract = pcontract
            Me.TechSupport = ptechSupport
            Me.Disclaimer = pdisclaimer
            Me.OfferID = pofferID
            Me.Version = pversion
        End Sub

        Public Sub New(ByVal pshortName As String, ByVal pmediumName As String, _
            ByVal plongName As String, ByVal pprice As PriceType, _
            ByVal pinstallPrice As CustomizablePriceType, _
            ByVal phardwarePrice As CustomizablePriceType, _
            ByVal pdepositPrice As CustomizablePriceType, _
            ByVal ppromotion() As PromotionType, _
            ByVal pqualifiedHardware() As HardwareType, _
            ByVal pcustomization() As CustomizationTypeQueryOffers, _
            ByVal pincludedItems() As IncludedItemsType, _
            ByVal pmarketingInfo As MarketingInfoType, _
            ByVal pcontract As ContractType, ByVal ptechSupport As String, _
            ByVal pdisclaimer As String, ByVal pofferID As String, _
            ByVal pversion As Decimal, ByVal pstrTerms As String, _
            ByVal pblnMovesOffer As Boolean, _
            ByVal pblnMovesOfferSpecified As Boolean)

            Me.New(pshortName, pmediumName, plongName, _
                pprice, pinstallPrice, phardwarePrice, _
                pdepositPrice, ppromotion, pqualifiedHardware, _
                pcustomization, pincludedItems, pmarketingInfo, _
                pcontract, ptechSupport, pdisclaimer, _
                pofferID, pversion)
            Me.TermsAndConditions = pstrTerms
            Me.MovesOffer = pblnMovesOffer
            Me.MovesOfferSpecified = pblnMovesOfferSpecified
        End Sub

    End Class

    Public Enum OfferTypeEnum

        m_Data
        m_Video
        m_Voice
        m_WirelessVoice
    End Enum

    ''' <summary>
    ''' Address (Parsed)  <BR/>
    '''The parsed Address element contains the set of elements that comprise the result of 
    '''the G2B postal scrubbing function performed on the raw (unparsed) Address 
    '''element in QueryOffers. <BR/>
    '''The parsed consumer address is used to determine serviceability. <BR/>
    ''' <BR/>Elements: Predir, 
    '''PrimRange, PrimName, 
    '''Suffix, Postdir, 
    '''UnitDesig, SecRange, 
    '''City, State, Zip, Zip4 
    ''' 
    '''<BR/>use: Required 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("ParsedUSAddress:  predirField {Predir},  primRangeField {PrimRange},  primNameField {}, suffixField {Suffix}, postdirField {Postdir}, unitDesigField {UnitDesig}, secRangeField {SecRange}, cityField {City}, stateField {State}, zipField {Zip}, zip4Field {Zip4} ")> _
    Public Class ParsedUSAddressType

        Private m_predirField As String
        Private m_primRangeField As String
        Private m_primNameField As String
        Private m_suffixField As String
        Private m_postdirField As String
        Private m_unitDesigField As String
        Private m_secRangeField As String
        Private m_cityField As String
        Private m_stateField As String
        Private m_zipField As String
        Private m_zip4Field As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)
            Try
                sb.Append("<BR/>ParsedUSAddressType")

                If (Me.m_predirField IsNot Nothing) Then
                    sb.Append("<BR/>Predir:" & Me.m_predirField)
                End If

                If (Me.m_primRangeField IsNot Nothing) Then
                    sb.Append("<BR/>Prim Range:" & Me.m_primRangeField)
                End If

                If (Me.m_primNameField IsNot Nothing) Then
                    sb.Append("<BR/>Prim Name:" & Me.m_primNameField)
                End If

                If (Me.m_suffixField IsNot Nothing) Then
                    sb.Append("<BR/>Suffix:" & Me.m_suffixField)
                End If

                If (Me.m_postdirField IsNot Nothing) Then
                    sb.Append("<BR/>PostDir:" & Me.m_postdirField)
                End If

                If (Me.m_unitDesigField IsNot Nothing) Then
                    sb.Append("<BR/>Unit Desig:" & Me.m_unitDesigField)
                End If

                If (Me.m_secRangeField IsNot Nothing) Then
                    sb.Append("<BR/>Sec Range:" & Me.m_secRangeField)
                End If

                If (Me.m_cityField IsNot Nothing) Then
                    sb.Append("<BR/>City:" & Me.m_cityField)
                End If

                If (Me.m_stateField IsNot Nothing) Then
                    sb.Append("<BR/>State:" & Me.m_stateField)
                End If

                If (Me.m_zipField IsNot Nothing) Then
                    sb.Append("<BR/>Zip:" & Me.m_zipField)
                End If

                If (Me.m_zip4Field IsNot Nothing) Then
                    sb.Append("<BR/>Zip4:" & Me.m_zip4Field)
                End If

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function
        ''' <summary>
        '''Predir <BR/>
        '''The USPS standard abbreviation for the predirectional indicator (if used); e.g., The "North" in "1000 North Vine Street" abbreviated to "N". 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 2
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Predir() As String
            Get
                Return Me.m_predirField
            End Get
            Set(ByVal value As String)
                Me.m_predirField = value
            End Set
        End Property

        ''' <summary>
        '''PrimRange <BR/>
        '''The Primary Range of the Address. Usually the house number; e.g., the "1000" in "1000 North Vine Street". 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 10
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PrimRange() As String
            Get
                Return Me.m_primRangeField
            End Get
            Set(ByVal value As String)
                Me.m_primRangeField = value
            End Set
        End Property

        ''' <summary>
        '''PrimName <BR/>
        '''The primary street name; e.g., the "Vine" in "1000 North Vine Street". 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 29
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PrimName() As String
            Get
                Return Me.m_primNameField
            End Get
            Set(ByVal value As String)
                Me.m_primNameField = value
            End Set
        End Property

        ''' <summary>
        '''Suffix  <BR/>
        '''The USPS standard abbreviated suffix (St, Ave, Blvd, Rd, etc.); e.g., "Street" abbreviated to "St" in 
        '''"1000 North Vine Street". 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''maxLength: 4
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Suffix() As String
            Get
                Return Me.m_suffixField
            End Get
            Set(ByVal value As String)
                Me.m_suffixField = value
            End Set
        End Property

        ''' <summary>
        '''Postdir <BR/>
        '''The USPS standard abbreviated post-direction. Example: "1000 North Vine Street SE". 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 2        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Postdir() As String
            Get
                Return Me.m_postdirField
            End Get
            Set(ByVal value As String)
                Me.m_postdirField = value
            End Set
        End Property

        ''' <summary>
        '''UnitDesig  <BR/>
        '''The USPS standard abbreviations for a non-single family dwelling; e.g., #, Apt, Ste, etc. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 10
        '''<BR/>use: Required 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property UnitDesig() As String
            Get
                Return Me.m_unitDesigField
            End Get
            Set(ByVal value As String)
                Me.m_unitDesigField = value
            End Set
        End Property

        ''' <summary>
        '''SecRange  <BR/>
        '''An apartment or suite number only; e.g., for Apartment 16A", "Apartment" would be 
        '''abbreviated to "apt" and entered into the UnitDesig element and 16A" would be entered 
        '''into the SecRange element. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>max length: 8
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SecRange() As String
            Get
                Return Me.m_secRangeField
            End Get
            Set(ByVal value As String)
                Me.m_secRangeField = value
            End Set
        End Property

        ''' <summary>
        '''City (Parsed) 
        '''The parsed City element is the town or city name in USPS format. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''max length: 28
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property City() As String
            Get
                Return Me.m_cityField
            End Get
            Set(ByVal value As String)
                Me.m_cityField = value
            End Set
        End Property

        ''' <summary>
        '''State  <BR/>
        '''The parsed State element is the USPS standard 2-character state abbreviation. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        ''' <BR/>maxLength: 2
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property State() As String
            Get
                Return Me.m_stateField
            End Get
            Set(ByVal value As String)
                Me.m_stateField = value
            End Set
        End Property

        ''' <summary>
        '''Zip  <BR/>
        '''The parsed Zip element is the USPS standard 5-digit US ZIP code. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: \d{5}
        '''
        '''
        '''The Zip element is always 5 numeric digits. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Zip() As String
            Get
                Return Me.m_zipField
            End Get
            Set(ByVal value As String)
                Me.m_zipField = value
            End Set
        End Property

        ''' <summary>
        '''Zip4 
        '''The parsed Zip4 element is the USPS standard 4-digit extension to the USPS standard ZIP code. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>format: \d{4}
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Zip4() As String
            Get
                Return Me.m_zip4Field
            End Get
            Set(ByVal value As String)
                Me.m_zip4Field = value
            End Set
        End Property

        Public Sub New(ByVal ppredir As String, _
                ByVal pprimRange As String, _
                ByVal pprimName As String, _
                ByVal psuffix As String, _
                ByVal ppostdir As String, _
                ByVal punitDesig As String, _
                ByVal psecRange As String, _
                ByVal pcity As String, _
                ByVal pstate As String, _
                ByVal pzip As String, _
                ByVal pzip4 As String)
            Me.Predir = ppredir
            Me.PrimRange = pprimRange
            Me.PrimName = pprimName
            Me.Suffix = psuffix
            Me.Postdir = ppostdir
            Me.UnitDesig = punitDesig
            Me.SecRange = psecRange
            Me.City = pcity
            Me.State = pstate
            Me.Zip = pzip
            Me.Zip4 = pzip4
        End Sub
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
    End Class

    Public Enum PriceFrequencyEnum

        m_Once
        m_Monthly
    End Enum

    ''' <summary>
    ''' The dollar amount charged for a service offering or the dollar amount charged for a Customization. An associated Frequency attribute specifies how often the Price will occur.
    ''' <BR/>Attributes: Frequency, Description, Display
    ''' <BR/>use: Required
    ''' <BR/>data type: Decimal
    ''' <BR/>min/max occurs: 1-1
    ''' <BR/>format: 10, including 2 fractional digits
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Price: {_descriptionField} {_valueField.ToString()}/{_frequencyField.ToString()}")> _
    Public Class PriceType

        Private m_frequencyField As PriceFrequencyEnum
        Private m_descriptionField As String
        Private m_valueField As Decimal

        ' 8/2007 jwg added for G2B 4.1
        Private m_displayField As Boolean
        Private m_displayFieldSpecified As Boolean

        ''' <summary>
        ''' Indicates if the price field is to be displayed to the consumer
        ''' <BR/>use: optional
        ''' <BR/>data type: boolean
        ''' <br/>min/max occurs: 0-1
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property DisplayField() As Boolean
            Get
                Return m_displayField
            End Get
            Set(ByVal value As Boolean)
                m_displayField = value
            End Set
        End Property
        Public Property DisplayFieldSpecified() As Boolean
            Get
                Return m_displayFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_displayFieldSpecified = value
            End Set
        End Property

        ''' <summary>
        '''Frequency <BR/>
        '''Specifies how often the consumer is charged, or receives, each element listed in the "Used By" 
        '''column. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''enumeration: Once, Monthly
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Frequency() As PriceFrequencyEnum
            Get
                Return Me.m_frequencyField
            End Get
            Set(ByVal value As PriceFrequencyEnum)
                Me.m_frequencyField = value
            End Set
        End Property

        ''' <summary>
        ''' An explanation for the consumer of the Price
        ''' <BR/>Use: optional
        ''' <BR/>data type: string
        ''' <BR/>min/max length: 1-200
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Description() As String
            Get
                Return Me.m_descriptionField
            End Get
            Set(ByVal value As String)
                Me.m_descriptionField = value
            End Set
        End Property
        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As Decimal
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As Decimal)
                Me.m_valueField = value
            End Set
        End Property
        Public Sub New(ByVal pfrequency As PriceFrequencyEnum, _
            ByVal pdescription As String, _
            ByVal pvalue As Decimal)

            Me.Frequency = pfrequency
            Me.Description = pdescription
            Me.Value = pvalue
        End Sub

        Public Sub New(ByVal pfrequency As PriceFrequencyEnum, _
                ByVal pdescription As String, _
                ByVal pvalue As Decimal, _
                ByVal pblndisplayField As Boolean, _
                ByVal pblndisplayFieldSpecified As Boolean)
            Me.new(pfrequency, pdescription, pvalue)
            Me.m_displayField = pblndisplayField
            Me.m_displayFieldSpecified = pblndisplayFieldSpecified
        End Sub
        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            Try
                sb.Append("<BR/><table><tr><td colspan=2>Price Type Description: " & _
                        Me.Description & "</td></tr>" & _
                        "<tr><td>Frequency: " & Me.Frequency.ToString & "</td><td>" & _
                        "Value: " & Me.Value.ToString() & _
                        "</td></tr><tr><td> Display: " & Me.DisplayField.ToString() & _
                        "</td><td>Display Specified: " & Me.DisplayFieldSpecified.ToString() & _
                        "</td></tr></table>")
                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function

    End Class

    ''' <summary>
    '''Promotion <BR/>
    '''A brief description of the promotion. 
    ''' <BR/>Attributes: PromotionID, Name, StartDate, EndDate, Disclaimer, Value 
    '''<BR/>use: Optional 
    '''<BR/>data type: String 
    '''<BR/>min/max occurs: 0-20 
    '''<BR/>min/max length: 1-1000 
    '''<BR/>The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms and industry jargon.
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Promotion: id={_promotionIDField} , name {_namefield} ")> _
    Public Class PromotionType

        Private m_promotionIDField As String
        Private m_nameField As String
        Private m_startDateField As Date
        Private m_startDateFieldSpecified As Boolean
        Private m_endDateField As Date
        Private m_endDateFieldSpecified As Boolean
        Private m_disclaimerField As String
        Private m_valueField As Decimal
        Private m_valueFieldSpecified As Boolean
        Private m_value1Field As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            Try
                sb.Append("<BR/><B>Promotion: " & Me.PromotionID.ToString() & _
                            "</B><BR/>Name: " & Me.Name.ToString() & _
                            "<BR/>Start Date: " & Me.StartDate.ToString() & _
                            "<BR/>Start Date Specified: " & Me.StartDateSpecified.ToString() & _
                            "<BR/>End Date: " & Me.EndDate.ToString() & _
                            "<BR/>End Date Specified: " & Me.EndDateSpecified.ToString() & _
                            "<BR/>Disclaimer: " & Me.Disclaimer.ToString() & _
                            "<BR/>Value: " & Me.Value.ToString() & _
                            "<BR/>Value Specified: " & Me.ValueSpecified.ToString() & _
                            "<BR/>Value1: " & Me.Value1.ToString())

                Return sb.ToString()
            Catch ex As Exception
                Debug.WriteLine(ex.ToString())
                Return sb.ToString()
            End Try
        End Function
        ''' <summary>
        '''PromotionID <br/>
        '''The MSO-assigned identifier for the promotional offer. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        '''<BR/>This attribute should not be displayed to the consumer.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property PromotionID() As String
            Get
                Return Me.m_promotionIDField
            End Get
            Set(ByVal value As String)
                Me.m_promotionIDField = value
            End Set
        End Property

        ''' <summary>
        ''' Title or short description for the consumer of a promotion
        ''' <BR/>Use: Required
        ''' <br/>Data Type: String
        ''' <BR/>min/max length: 1-50
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Name() As String
            Get
                Return Me.m_nameField
            End Get
            Set(ByVal value As String)
                Me.m_nameField = value
            End Set
        End Property

        ''' <summary>
        '''StartDate  <BR/>
        '''The calendar date a Promotion begins. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Date 
        '''<BR/>format: CCYY-MM-DD
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property StartDate() As Date
            Get
                Return Me.m_startDateField
            End Get
            Set(ByVal value As Date)
                Me.m_startDateField = value
            End Set
        End Property

        Public Property StartDateSpecified() As Boolean
            Get
                Return Me.m_startDateFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                Me.m_startDateFieldSpecified = value
            End Set
        End Property

        ''' <summary>
        '''StartDate  <BR/>
        '''The calendar date a Promotion ends. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Date 
        '''<BR/>format: CCYY-MM-DD
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property EndDate() As Date
            Get
                Return Me.m_endDateField
            End Get
            Set(ByVal value As Date)
                Me.m_endDateField = value
            End Set
        End Property

        Public Property EndDateSpecified() As Boolean
            Get
                Return Me.m_endDateFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                Me.m_endDateFieldSpecified = value
            End Set
        End Property

        ''' <summary>
        '''As an element, Disclaimer describes 
        '''the conditions, stipulations, and/or exclusions applicable to 
        '''the DataOffer, VideoOffer, VoiceOffer, or WirelessVoiceOffer. 
        '''<BR/>min/max length: 1-5000
        '''
        '''Disclaimer 
        '''<BR/>use: Optional 
        '''The consumer will read this verbiage. The MSO should write in clear and concise sentences. Avoid acronyms and industry jargon.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Disclaimer() As String
            Get
                Return Me.m_disclaimerField
            End Get
            Set(ByVal value As String)
                Me.m_disclaimerField = value
            End Set
        End Property

        ''' <summary>
        '''Value  <BR/>
        '''Examples: <BR/>
        '''- $10.95 savings per month for 6 months; or 
        '''<BR/>Describes the savings that a Promotion provides to the consumer. 
        '''<BR/>use: Optional 
        '''<BR/>data type: Decimal 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As Decimal
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As Decimal)
                Me.m_valueField = value
            End Set
        End Property

        Public Property ValueSpecified() As Boolean
            Get
                Return Me.m_valueFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                Me.m_valueFieldSpecified = value
            End Set
        End Property

        Public Property Value1() As String
            Get
                Return Me.m_value1Field
            End Get
            Set(ByVal value As String)
                Me.m_value1Field = value
            End Set
        End Property

        Public Sub New(ByVal promotionID As String, ByVal name As String, ByVal startDate As Date, ByVal startDateSpecified As Boolean, ByVal endDate As Date, ByVal endDateSpecified As Boolean, ByVal disclaimer As String, ByVal value As Decimal, ByVal valueSpecified As Boolean, ByVal value1 As String)
            Me.PromotionID = promotionID
            Me.Name = name
            Me.StartDate = startDate
            Me.StartDateSpecified = startDateSpecified
            Me.EndDate = endDate
            Me.EndDateSpecified = endDateSpecified
            Me.Disclaimer = disclaimer
            Me.Value = value
            Me.ValueSpecified = valueSpecified
            Me.Value1 = value1
        End Sub
    End Class

    ''' <summary>
    '''PrivacyNotice <BR/>
    '''Indicates if the consumer would like to receive additional marketing information. 
    '''<BR/>use: Required 
    '''<BR/>data type: String 
    '''<BR/>min/max occurs: 1-1 
    '''<BR/>enumeration: OptIn, OptOut
    '''<BR/>The Affiliate Site may set the PrivacyNotice default to OptOut without providing a choice to the consumer. 
    ''' </summary>
    ''' <remarks></remarks>
    Public Enum PrivacyNoticeEnum

        m_OptIn
        m_OptOut
    End Enum
    ''' <summary>
    ''' The set of elements that comprise the additional choices and prices in a 
    ''' Customization, from which the consumer can select to tailor the service offer
    ''' to suit their needs<BR/>
    ''' Elements: Choice<BR/>
    ''' Attributes: Min, Max <BR/>
    ''' use: required <BR/>
    ''' data type: n/a <BR/>
    ''' min/max occurs: 1-1
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Selection : min {_minField} max {_maxField} {_choiceField.Length} choices")> _
    Public Class SelectionType

        Private m_choiceField() As ChoiceType
        Private m_minField As Integer
        Private m_maxField As Integer

        Public Overrides Function ToString() As String

            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Selection Type")
                sb.Append("<BR/>Min: " & m_minField.ToString() & ", Max: " & _
                            m_maxField.ToString())

                If (m_choiceField IsNot Nothing) Then
                    For iFld As Integer = 0 To m_choiceField.Length - 1
                        sb.Append("<BR/>Choice : " & m_choiceField(iFld).ToString())
                    Next
                End If
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        ''' List of attributes and Price elements that comprise the options from which the consumer can select to tailor the service order to suit their needs.
        ''' <BR/>Elements: Price
        ''' <BR/>Attributes: ChoiceID, Name, Description
        ''' <BR/>use: Required
        ''' <BR/>data type: n/a
        ''' <BR/>min/max occurs: 1-10
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Choice() As ChoiceType()
            Get
                Return Me.m_choiceField
            End Get
            Set(ByVal value As ChoiceType())
                Me.m_choiceField = value
            End Set
        End Property

        ''' <summary>
        '''Min <BR/>
        '''The Min attribute is used in two ways. When used in the Selection element, it specifies the minimum number of 
        '''selections available to a consumer for the applicable Customization. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/> minInclusive:  0 
        '''<BR/> maxInclusive:  999
        '''<BR/>The Affiliate Site should not allow the consumer to enter a number less than the applicable Min.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Min() As Integer
            Get
                Return Me.m_minField
            End Get
            Set(ByVal value As Integer)
                Me.m_minField = value
            End Set
        End Property

        ''' <summary>
        '''Max <BR/>
        '''The Max attribute is used in two ways. When used in the Selection element, it specifies the 
        '''maximum number of selections available to a consumer for the applicable Customization. 
        '''Max is also used in the Number element 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/> minInclusive:  1 
        '''<BR/> maxInclusive:  10
        '''<BR/>The Affiliate Site should not allow the consumer to select more items than the applicable Max. 
        '''The MSO should never specify a value for Max that is greater than the number of Choice elements. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Max() As Integer
            Get
                Return Me.m_maxField
            End Get
            Set(ByVal value As Integer)
                Me.m_maxField = value
            End Set
        End Property
    End Class

    ''' <summary>
    '''Address (Unparsed) <BR/>
    '''The unparsed Address element contains the set of elements that 
    '''comprise the address entered by the consumer requesting a service offer. 
    ''' <BR/>
    '''This Address (unparsed) may differ from the ShippingAddress. 
    ''' 
    ''' <BR/>Elements: 
    '''AddressLine, Suite, 
    '''City, State, Zip, Zip4 
    ''' 
    '''<BR/>use: Required 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 1-1 
    ''' 
    '''The unparsed Address element provides the raw data used by the 
    '''postal scrubber to create the parsed Address element used in later messages. 
    ''' <BR/>
    '''A complete street address with all postal components (street number, 
    '''street name, city, state, zip code and country) may result in a more reliable 
    '''scrubbed address. However, in the interest of limiting the consumer's 
    '''data entry effort, only the following values are required: 
    '''A street address (number and name); i.e., the AddressLine element; 
    '''and The 5-digit ZIP Code, or the city and state 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("UnparsedUSAddressType: {_addressLineField} {_suiteField} {_cityField} {_stateField} {_zipField} {_zip4Field}")> _
    Public Class UnparsedUSAddressType

        Private m_addressLineField As String
        Private m_suiteField As String
        Private m_cityField As String
        Private m_stateField As String
        Private m_zipField As String
        Private m_zip4Field As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)

            Try
                sb.Append("<BR/>Unparsed US Address Type")

                sb.Append("<BR/>Address Line " & Utility.DefaultString(m_addressLineField))
                sb.Append("<BR/>Suite " & Utility.DefaultString(m_suiteField))
                sb.Append("<BR/>City " & Utility.DefaultString(m_cityField))
                sb.Append("<BR/>State " & Utility.DefaultString(m_stateField))
                sb.Append("<BR/>Zip " & Utility.DefaultString(m_zipField))
                sb.Append("<BR/>Zip4 " & Utility.DefaultString(m_zip4Field))

                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function

        ''' <summary>
        '''AddressLine <BR/>
        '''The address as entered by the consumer. 
        ''' <BR/>Attributes: Name 
        '''<BR/>use: Required for any element using an Address (unparsed) element. 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1-1 
        '''max length: 60
        '''
        '''AddressLine can contain the street number, street name, and any prefixes or suffixes. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AddressLine() As String
            Get
                Return Me.m_addressLineField
            End Get
            Set(ByVal value As String)
                Me.m_addressLineField = value
            End Set
        End Property

        ''' <summary>
        '''Suite  <BR/>
        '''The space, lot, or apartment number for the street address contained in the AddressLine. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>
        '''max length: 60
        '''<BR/>
        '''Recommend that the Affiliate provide a specific data entry element for the consumer to specify a suite or apartment number. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Suite() As String
            Get
                Return Me.m_suiteField
            End Get
            Set(ByVal value As String)
                Me.m_suiteField = value
            End Set
        End Property

        ''' <summary>
        '''City (Unparsed) 
        '''The unparsed City element is the town or city name. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-0 
        '''max length: 60
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property City() As String
            Get
                Return Me.m_cityField
            End Get
            Set(ByVal value As String)
                Me.m_cityField = value
            End Set
        End Property

        ''' <summary>
        '''State  <BR/>
        '''The unparsed State element is the state abbreviation. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>max length: 2 
        '''<BR/>The Address (unparsed) element must contain either a City and State element, or the 5-digit Zip element.         ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property State() As String
            Get
                Return Me.m_stateField
            End Get
            Set(ByVal value As String)
                Me.m_stateField = value
            End Set
        End Property

        ''' <summary>
        '''Zip <BR/>
        '''The unparsed Zip element is a 5-digit US ZIP code. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>format: \d{5}
        '''
        '''The Zip element is always 5 numeric digits. 
        '''The Affiliate must provide either the City and State element or the 5-digit Zip element. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Zip() As String
            Get
                Return Me.m_zipField
            End Get
            Set(ByVal value As String)
                Me.m_zipField = value
            End Set
        End Property

        ''' <summary>
        '''Zip4 <BR/>
        '''The unparsed Zip4 element is a 4-digit extension to the ZIP code. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>format: \d{4}
        '''
        '''The Zip4 element is always 4 numeric digits. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Zip4() As String
            Get
                Return Me.m_zip4Field
            End Get
            Set(ByVal value As String)
                Me.m_zip4Field = value
            End Set
        End Property

        Public Sub New(ByVal addressLine As String, ByVal suite As String, ByVal city As String, ByVal state As String, ByVal zip As String, ByVal zip4 As String)
            Me.AddressLine = addressLine
            Me.Suite = suite
            Me.City = city
            Me.State = state
            Me.Zip = zip
            Me.Zip4 = zip4
        End Sub
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()

        End Sub
    End Class

    ''' <summary>
    '''AddressSuggestion 
    '''If the MSO cannot find an exact match for the entered address in their system, but has found 
    '''one or more addresses that may be a match, those possible matches are returned in this element. 
    ''' 
    ''' <BR/>Elements: 
    '''AddressLine, Suite, City, State, Zip, Zip4 
    ''' <BR/>Attributes: AddressID 
    '''<BR/>use: Optional 
    '''<BR/>data type: n/a 
    '''<BR/>min/max occurs: 0-100
    '''
    '''Support for Address Suggestions is  optional for the MSO and Affiliate. If 
    '''supported, the Affiliate should use the information in this element to get 
    '''clarification from the consumer. The Affiliate may return any 
    '''AddressSuggestion using the QueryOffersResubmit service. 
    '''Affiliates will need to decide how to handle display of more than 10 
    '''Address Suggestions to the consumer. 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("USAddressSuggestionType: {m_addressIDField}")> _
    Public Class USAddressSuggestionType
        Inherits UnparsedUSAddressType

        Private m_addressIDField As String

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(500)
            Try
                sb.Append(MyBase.ToString())
                If (Me.m_addressIDField IsNot Nothing) Then
                    sb.Append(Me.m_addressIDField)
                End If
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try

        End Function

        ''' <summary>
        '''AddressID <BR/>
        '''G2B has situations where the AddressID is optional and situations where it is required. 
        '''The optional AddressID attribute is the MSO-assigned identifier for the consumer's 
        '''premises. This identifier distinguishes the address in the MSO's system. 
        ''' 
        '''The required AddressID attribute is the MSO-assigned identifier for an Address 
        '''Suggestion and must always be present in Resubmit messages. 
        '''<BR/>use: Optional / Required 
        '''(If utilizing the Address Suggestions feature) 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30 
        ''' 
        '''The Affiliate Site should not display this attribute to the consumer. The Affiliate Site should copy the 
        '''AddressID received in the QueryOffersResponse to all future messages relative to that address. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property AddressID() As String
            Get
                Return Me.m_addressIDField
            End Get
            Set(ByVal value As String)
                Me.m_addressIDField = value
            End Set
        End Property

        Public Sub New(ByVal addressID As String, ByVal addressLine As String, ByVal suite As String, ByVal city As String, ByVal state As String, ByVal zip As String, ByVal zip4 As String)
            MyBase.new(addressLine, suite, city, state, zip, zip4)
            Me.AddressID = addressID
        End Sub
    End Class

    Public Enum VideoCategoryEnum

        m_Basic
        m_Digital
        m_HDDigital
        m_HDUpgrade
        m_DVRDigital

        m_HDDVRDigital
        m_DVRUpgrade
        m_HDDVRUpgrade
    End Enum
#End Region

#Region "Added for G2B v4.1"

    <Serializable()> _
    <DebuggerDisplay("Result: {Code} {Value}")> _
    Public Class Result

        Private m_codeField As Integer
        Private m_valueField As String

        ''' <summary>
        '''Code 
        '''The numeric portion of the Result element that labels a normal transaction or an 
        '''encountered exception condition. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min/max occurs: 1-1 
        '''minInclusive: 0 
        '''maxInclusive: 999
        '''<BR/>
        '''The Affiliate Site should not display this attribute to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Code() As Integer
            Get
                Return Me.m_codeField
            End Get
            Set(ByVal value As Integer)
                Me.m_codeField = value
            End Set
        End Property

        ''' <summary>
        '''The text portion of the Result element that labels a normal transaction or an 
        '''encountered exception condition. 
        '''<BR/>use: Required 
        '''<BR/>data type: String
        '''<BR/>min/max occurs: 1-1 
        '''<BR/>
        '''The Affiliate Site should not display this attribute to the consumer. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Value() As String
            Get
                Return Me.m_valueField
            End Get
            Set(ByVal value As String)
                Me.m_valueField = value
            End Set
        End Property

        Public Overrides Function ToString() As String
            Return "Code : " & m_codeField.ToString & _
                    " Value: " & Utility.DefaultString(m_valueField)
        End Function

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub
        Public Sub New(ByVal pintCode As Integer, ByVal pstrValue As String)
            Me.m_valueField = pstrValue
            Me.m_codeField = pintCode
        End Sub

    End Class

    ''' <summary>
    ''' A collection of data items to support auto-provisioning
    ''' <BR/>Attributes: Category, MACAddress, SerialNumber
    ''' <BR/>use: Optional
    ''' <BR/>min/max occurs:0-10
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Cust Hdware: Category={Category}, MAC={MACAddress}, Serial#={SerialNumber}")> _
    Public Class CustomerHardwareType
        Private m_categoryField As HardwareCategoryEnum
        Private m_categoryFieldSpecified As Boolean
        Private m_mACAddressField As String
        Private m_serialNumberField As String
        Public Overrides Function ToString() As String
            Return "<BR>Customer Hardware" & _
                "<BR>Category " & m_categoryField.ToString() & _
                "<BR>CategoryFieldSpecified " & m_categoryFieldSpecified.ToString() & _
                "<BR>MAC Address " & m_mACAddressField & _
                "<BR>SerialNumberField " & m_serialNumberField & "<BR>"
        End Function

        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub

        Public Sub New(ByVal pobjCategory As HardwareCategoryEnum, _
            ByVal pblnCategorySpecified As Boolean, _
            ByVal pstrMACAddress As String, _
            ByVal pstrSerialNumber As String)
            Me.m_categoryField = pobjCategory
            Me.m_categoryFieldSpecified = pblnCategorySpecified
            Me.m_mACAddressField = pstrMACAddress
            Me.m_serialNumberField = pstrSerialNumber
        End Sub

        ''' <summary>
        '''Category <BR/>
        '''G2B uses a Category element and two Category attributes. 
        '''As an attribute in the Order messages, Category identifies the 
        '''type of hardware or auto-provision item sold. 
        '''<BR/>use: Required/Optional 
        '''<BR/>data type: String (uses QualifiedHardware enumeration list) 
        '''<BR/>min/max occurs: 0-1
        '''
        '''Whether or not the data item is required, will depend on the MSO 
        '''feature implementation. The MSO may designate the item as 
        '''required if they support Auto-Provisioning. 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property Category() As HardwareCategoryEnum
            Get
                Return m_categoryField
            End Get
            Set(ByVal value As HardwareCategoryEnum)
                m_categoryField = value
            End Set
        End Property
        Public Property CategorySpecified() As Boolean
            Get
                Return m_categoryFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_categoryFieldSpecified = value
            End Set
        End Property
        ''' <summary>
        '''MACAddress <BR/>
        '''Media Access Control address. The unique hardware identification number of a device connected to a network, expressed as a 48-bit 
        '''hexadecimal number. The MAC Address identifies the type of hardware or auto-provision item sold. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MACAddress() As String
            Get
                Return m_mACAddressField
            End Get
            Set(ByVal value As String)
                m_mACAddressField = value
            End Set
        End Property
        ''' <summary>
        '''SerialNumber  <BR/>
        '''<BR/>use: Required 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>mix/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property SerialNumber() As String
            Get
                Return m_serialNumberField
            End Get
            Set(ByVal value As String)
                m_serialNumberField = value
            End Set
        End Property
    End Class

    ''' <summary>
    ''' If Authentication is supported and the customer chose to participate, this element houses the set of data items that can be returned by the MSO as a result of a successful Authentication.
    ''' <BR/>use: optional
    ''' <BR/>Attributes:Account Number, BillingCycle, DepositAmount, CreditClass
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("EligibilityType: Account {_accountNumber}, Credit Class {_creditClassField}")> _
    Public Class EligibilityType
        ''' <summary>private container for <see cref="accountNumber"/> property</summary>
        Private m_accountNumber As String
        ''' <summary>private container for <see cref="billingCycle"/> property</summary>
        Private m_billingCycle As Integer = 0
        ''' <summary>private container for <see cref="billingCycleFieldSpecified"/> property</summary>
        Private m_billingCycleFieldSpecified As Boolean = 0
        ''' <summary>private container for <see cref="depositAmountField"/> property</summary>
        Private m_depositAmountField As Decimal = 0
        ''' <summary>private container for <see cref="depositAmountFieldSpecified"/> property</summary>
        Private m_depositAmountFieldSpecified As Boolean = 0
        ''' <summary>private container for <see cref="creditClassField"/> property</summary>
        Private m_creditClassField As String
        ''' <summary>Default no-arg constructor</summary>
        Public Sub New()
            MyBase.New()
        End Sub
        ''' <summary>Constructor to populate all fields</summary>
        ''' <param name="pstraccountNumber">Initial value for <see cref="accountNumber"/> property
        '''</param>
        ''' <param name="pintbillingCycle">Initial value for <see cref="billingCycle"/> property
        '''</param>
        ''' <param name="pblnbillingCycleFieldSpecified">Initial value for <see cref="billingCycleFieldSpecified"/> property
        '''</param>
        ''' <param name="pdecdepositAmountField">Initial value for <see cref="depositAmountField"/> property
        '''</param>
        ''' <param name="pblndepositAmountFieldSpecified">Initial value for <see cref="depositAmountFieldSpecified"/> property
        '''</param>
        ''' <param name="pstrcreditClassField">Initial value for <see cref="creditClassField"/> property
        '''</param>
        Public Sub New(ByVal pstraccountNumber As String, ByVal pintbillingCycle As Integer, ByVal pblnbillingCycleFieldSpecified As Boolean, ByVal pdecdepositAmountField As Decimal, ByVal pblndepositAmountFieldSpecified As Boolean, ByVal pstrcreditClassField As String)
            MyBase.New()
            Me.m_accountNumber = pstraccountNumber
            Me.m_billingCycle = pintbillingCycle
            Me.m_billingCycleFieldSpecified = pblnbillingCycleFieldSpecified
            Me.m_depositAmountField = pdecdepositAmountField
            Me.m_depositAmountFieldSpecified = pblndepositAmountFieldSpecified
            Me.m_creditClassField = pstrcreditClassField
        End Sub
        ''' <summary>AccountNumber <BR/>
        '''The authenticated customer's account number. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        Public Property accountNumber() As String
            Get
                Return m_accountNumber
            End Get
            Set(ByVal value As String)
                m_accountNumber = value
            End Set
        End Property
        ''' <summary>
        '''BillingCycle  <BR/>
        '''The authenticated customer's billing cycle. (could be any number between 1-31 
        '''representing a day of the month) 
        '''<BR/>use: Optional 
        '''<BR/>data type: Integer 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 0-2
        ''' </summary>
        Public Property billingCycle() As Integer
            Get
                Return m_billingCycle
            End Get
            Set(ByVal value As Integer)
                m_billingCycle = value
            End Set
        End Property
        ''' <summary>Getter/Setter for billingCycleFieldSpecified property</summary>
        Public Property billingCycleFieldSpecified() As Boolean
            Get
                Return m_billingCycleFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_billingCycleFieldSpecified = value
            End Set
        End Property
        ''' <summary>
        '''DepositAmount 
        '''<BR/>min/max occurs: 0-1 
        ''' 
        ''' <BR/>Attributes: Frequency, Description, Display 
        '''enumeration: 
        '''customizable
        '''
        '''If there is no deposit required, this element should contain 0 (zero). 
        '''<BR/>use: Optional 
        ''' </summary>
        Public Property depositAmountField() As Decimal
            Get
                Return m_depositAmountField
            End Get
            Set(ByVal value As Decimal)
                m_depositAmountField = value
            End Set
        End Property
        ''' <summary>T/F: Was a Deposit amount specified?</summary>
        Public Property depositAmountFieldSpecified() As Boolean
            Get
                Return m_depositAmountFieldSpecified
            End Get
            Set(ByVal value As Boolean)
                m_depositAmountFieldSpecified = value
            End Set
        End Property
        ''' <summary>A code used by some MSOs that may indicate
        ''' if a deposit will be required from the consumer before services 
        ''' can be issued.<BR/>
        ''' use: optional
        ''' <BR/>data type: string
        ''' <BR/>min/max occurs: 0-1
        ''' <BR/>min/max length: 1-30</summary>
        Public Property creditClassField() As String
            Get
                Return m_creditClassField
            End Get
            Set(ByVal value As String)
                m_creditClassField = value
            End Set
        End Property
        ''' <summary>Override base object ToString with a formatted string</summary>
        '''<returns>Formatted string showing first two fields</returns>
        Public Overrides Function ToString() As String
            Return String.Format("<BR>Eligibility<BR/>accountNumber:{0} billingCycle:{1}", _
            Utility.DefaultString(m_accountNumber), m_billingCycle)
        End Function

    End Class

    ''' <summary>
    ''' A field used by the MSO to collect standard information
    ''' during the Authenticate process
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Auth Field: ID={_authFieldID} Name={_name}")> _
    Public Class AuthFieldType
        ''' <summary>private container for <see cref="authFieldID"/> property</summary>
        Private m_authFieldID As String
        ''' <summary>private container for <see cref="name"/> property</summary>
        Private m_name As String
        ''' <summary>private container for <see cref="privateField"/> property</summary>
        Private m_privateField As Boolean = 0
        ''' <summary>private container for <see cref="booleanField"/> property</summary>
        Private m_booleanField As Boolean = 0
        ''' <summary>private container for <see cref="maxLen"/> property</summary>
        Private m_maxLen As Integer = 0
        ''' <summary>private container for <see cref="description"/> property</summary>
        Private m_description As String
        ''' <summary>Default no-arg constructor</summary>
        Public Sub New()

        End Sub
        ''' <summary>Constructor to populate all fields</summary>
        ''' <param name="pstrauthFieldID">Initial value for <see cref="authFieldID"/> property
        '''</param>
        ''' <param name="pstrname">Initial value for <see cref="name"/> property
        '''</param>
        ''' <param name="pblnprivateField">Initial value for <see cref="privateField"/> property
        '''</param>
        ''' <param name="pblnbooleanField">Initial value for <see cref="booleanField"/> property
        '''</param>
        ''' <param name="pintmaxLen">Initial value for <see cref="maxLen"/> property
        '''</param>
        ''' <param name="pstrdescription">Initial value for <see cref="description"/> property
        '''</param>
        Public Sub New(ByVal pstrauthFieldID As String, ByVal pstrname As String, ByVal pblnprivateField As Boolean, ByVal pblnbooleanField As Boolean, ByVal pintmaxLen As Integer, ByVal pstrdescription As String)
            MyBase.New()
            Me.m_authFieldID = pstrauthFieldID
            Me.m_name = pstrname
            Me.m_privateField = pblnprivateField
            Me.m_booleanField = pblnbooleanField
            Me.m_maxLen = pintmaxLen
            Me.m_description = pstrdescription
        End Sub
        ''' <summary>
        ''' AuthFieldID  <BR/>
        '''A Required attribute of the NewCustomer and ExistingCustomer sub-elements. An identifier 
        '''defined by the MSO to track additional Authentication information. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1 
        '''<BR/>min/max length: 1-30</summary>
        Public Property authFieldID() As String
            Get
                Return m_authFieldID
            End Get
            Set(ByVal value As String)
                m_authFieldID = value
            End Set
        End Property
        ''' <summary>'''Name 
        '''Indicates the Name of the custom field defined by the MSO to collect additional Authentication information. 
        '''<BR/>use: Required 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 1 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        Public Property name() As String
            Get
                Return m_name
            End Get
            Set(ByVal value As String)
                m_name = value
            End Set
        End Property
        ''' <summary>
        ''' Private <BR/>
        '''This attribute of the CustomAuthField element, indicates if the values entered by the consumer in the custom Authentication field should be displayed or hidden. Much like password entries are displayed as * (asterisks) instead of the actual entered keystrokes. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean </summary>
        Public Property privateField() As Boolean
            Get
                Return m_privateField
            End Get
            Set(ByVal value As Boolean)
                m_privateField = value
            End Set
        End Property
        '''<summary>Boolean  <BR/>
        '''Indicates to the Affiliate that the CustomAuthField can be presented to the customer as a 
        '''Checkbox or other Yes No type of control. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean 
        '''</summary>
        Public Property booleanField() As Boolean
            Get
                Return m_booleanField
            End Get
            Set(ByVal value As Boolean)
                m_booleanField = value
            End Set
        End Property
        ''' <summary>
        '''MaxLen <BR/>
        '''The maximum length of the Custom Authentication field defined by the MSO. 
        '''<BR/>use: Required 
        '''<BR/>data type: Integer 
        '''<BR/>min/max occurs: 1 
        '''<BR/>min/max length: 1-30
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property maxLen() As Integer
            Get
                Return m_maxLen
            End Get
            Set(ByVal value As Integer)
                m_maxLen = value
            End Set
        End Property
        ''' <summary>An explanation to the consumer of this Authentication
        ''' Field</summary>
        Public Property description() As String
            Get
                Return m_description
            End Get
            Set(ByVal value As String)
                m_description = value
            End Set
        End Property
        ''' <summary>Override base object ToString with a formatted string</summary>
        '''<returns>Formatted string showing first two fields</returns>
        Public Overrides Function ToString() As String
            Return String.Format("authFieldID:{0} name:{1}", m_authFieldID, m_name)
        End Function
    End Class

    ''' <summary>
    ''' The collection of data items defined as "standard" for the Authentication process.
    ''' </summary>
    ''' <remarks></remarks>
    Public Enum StandardAuthFieldEnum
        m_FirstName
        m_LastName
        m_ServiceAddress
        m_ServiceAddressPhone
        m_CreditCard

        m_DateOfBirth
        m_DriversLicense
        m_DriversLicenseState
        m_SSN
        m_SSN4
    End Enum

    ''' <summary>
    '''A member of the set of data items used by MSOs to tell affiliates what items to collect 
    '''from consumers in order to perform Authentication. 
    ''' <BR/>Elements: 
    '''StandardAuthField, CustomAuthField 
    '''<BR/>use: Optional 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Auth Field: {StandardAuth.Count} standard fields, {CustomAuth.Count} Custom Fields")> _
    Public Class AuthFieldDefinitionType
        Private m_standardAuthFieldEnum As List(Of StandardAuthFieldEnum)
        Private m_customAuthField As List(Of AuthFieldType)
        ''' <summary>
        '''StandardAuthField <BR/> 
        '''The collection of data items defined as "standard" for the Authentication process. 
        '''<BR/>use: Optional 
        '''<BR/>data type: String 
        '''<BR/>min/max occurs: 0-10 
        '''<BR/>min/max length: n/a 
        '''<BR/>enumeration: 
        '''FirstName, LastName, ServiceAddress, ServiceAddressPhone, CreditCard, DateOfBirth, DriversLicense, DriversLicenseState, SSN, SSN4 
        ''' </summary>
        ''' <remarks></remarks>
        Public Property StandardAuth() As List(Of StandardAuthFieldEnum)
            Get
                Return m_standardAuthFieldEnum
            End Get
            Set(ByVal value As List(Of StandardAuthFieldEnum))
                m_standardAuthFieldEnum = value
            End Set
        End Property
        ''' <summary>
        ''' A custom field created by the MSO used to collect
        ''' additional information to perform Authentication<BR/>
        ''' Attributes: AuthFieldID, Name, Private, Boolean, MaxLen, Description<BR/>
        ''' use: Optional<BR/>
        ''' min/max occurs: 0-10
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property CustomAuth() As List(Of AuthFieldType)
            Get
                Return m_customAuthField
            End Get
            Set(ByVal value As List(Of AuthFieldType))
                m_customAuthField = value
            End Set
        End Property
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub
        Public Sub New(ByVal plstStandardAuth As List(Of StandardAuthFieldEnum), _
            ByVal plstCustom As List(Of AuthFieldType))
            Me.m_standardAuthFieldEnum = plstStandardAuth
            Me.m_customAuthField = plstCustom
        End Sub
        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            Try
                sb.Append("<BR/>AuthFieldDefinition")
                If (Me.m_standardAuthFieldEnum IsNot Nothing) Then
                    For Each iItem As StandardAuthFieldEnum In Me.StandardAuth
                        sb.Append("<BR/>Standard Field: " & iItem.ToString())
                    Next
                End If
                If (Me.m_customAuthField IsNot Nothing) Then
                    For Each iItem As AuthFieldType In Me.CustomAuth
                        sb.Append("<BR/>custom Field: " & iItem.ToString())
                    Next
                End If
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function
    End Class

    ''' <summary>
    ''' A collection of data items that allows MSOs to tell Affiliates
    ''' what data items they must collect from the consumer in order to
    ''' provide Authentication.<BR/>
    ''' Sub Elements: NewCustomer, ExistingCustomer<BR/>
    ''' use: optional<BR/>
    ''' min/max occurs: 0-1<BR/>
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("Customer Auth Field: {DisplayFunc}")> _
    Public Class CustomerAuthFieldDefinitionType
        Private m_newCustomerField As List(Of AuthFieldDefinitionType)
        Private m_existingCustomerField As List(Of AuthFieldDefinitionType)

        Public ReadOnly Property DisplayFunc() As String
            Get
                Dim sb As StringBuilder = New StringBuilder(200)
                If (NewCustomer Is Nothing) Then
                    sb.Append("No New Customers, ")
                Else
                    sb.Append(NewCustomer.Count.ToString() & " New Customers, ")
                End If
                If (ExistingCustomer Is Nothing) Then
                    sb.Append("No Existing Customers, ")
                Else
                    sb.Append(ExistingCustomer.Count.ToString() & " Existing Customers. ")
                End If

                Return sb.ToString()
            End Get
        End Property
        ''' <summary>
        '''NewCustomer <BR/>
        '''A member of the set of data items used by MSOs to tell affiliates what items to collect from consumers in order to perform Authentication. 
        ''' <BR/>Elements: StandardAuthField, CustomAuthField 
        '''<BR/>use: Optional 
        '''<BR/>data type: n/a 
        '''<BR/>min/max occurs: 0-5 
        '''<BR/>min/max length: n/a
        '''<BR/>NewCustomer Indicates if the Authentication request is for a new customer. 
        '''<BR/>use: Required 
        '''<BR/>data type: Boolean 
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property NewCustomer() As List(Of AuthFieldDefinitionType)
            Get
                Return m_newCustomerField
            End Get
            Set(ByVal value As List(Of AuthFieldDefinitionType))
                m_newCustomerField = value
            End Set
        End Property
        ''' <summary>
        ''' ExistingCustomer 
        '''<BR/>data type: list of AuthFieldDefinitiontypes
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ExistingCustomer() As List(Of AuthFieldDefinitionType)
            Get
                Return m_existingCustomerField
            End Get
            Set(ByVal value As List(Of AuthFieldDefinitionType))
                m_existingCustomerField = value
            End Set
        End Property
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub
        Public Sub New(ByVal plstNew As List(Of AuthFieldDefinitionType), _
            ByVal plstExisting As List(Of AuthFieldDefinitionType))
            Me.m_newCustomerField = plstNew
            Me.m_existingCustomerField = plstExisting
        End Sub

        Public Overrides Function ToString() As String
            Dim sb As StringBuilder = New StringBuilder(1000)
            Try
                sb.Append("<BR/>AuthFieldDefinition")
                sb.Append("<BR/>New Customer:")
                If (Me.m_newCustomerField IsNot Nothing) Then
                    For Each iItem As AuthFieldDefinitionType In Me.NewCustomer
                        sb.Append("<BR/>New Customer: " & iItem.ToString())
                    Next
                Else
                    sb.Append(" Null<BR/>")
                End If
                sb.Append("<BR/>Existing Customer:")
                If (Me.m_existingCustomerField IsNot Nothing) Then
                    For Each iItem As AuthFieldDefinitionType In Me.ExistingCustomer
                        sb.Append("<BR/>Existing Customer: " & iItem.ToString())
                    Next
                End If
                sb.Append(" Null<BR/>")
                Return sb.ToString()
            Catch ex As Exception
                Return sb.ToString()
            End Try
        End Function
    End Class

    ''' <summary>
    ''' Indicates the consumer does not want to be checked against any
    ''' current subscriber database and should be treated as a new customer
    ''' (skipping service discovery).<BR/>
    ''' The presence of this element indicates the customer should be treated as 
    ''' "new"<BR/>
    ''' Attributes: MoveDate<BR/>
    ''' use: optional<BR/>
    ''' min/max occurs: 0-1<BR/>
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    <DebuggerDisplay("NewCustomer: {_moveDateField}")> _
        Public Class NewCustomerType
        Private m_moveDateField As String
        ''' <summary>
        '''MoveDate <BR/>
        ''' An attribute of the NewCustomer element. Allows a consumer to indicate when they will be establishing residency at the new address. Expected format: CCYY-MM-DD 
        '''<BR/>use: Optional 
        '''<BR/>data type: Date 
        '''<BR/>min/max occurs: 0-1 
        '''<BR/>min/max length: 1-10
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MoveDate() As String
            Get
                Return m_moveDateField
            End Get
            Set(ByVal value As String)
                m_moveDateField = value
            End Set
        End Property
        ''' <summary>Default No-arg constructor</summary>
        ''' <remarks></remarks>
        Public Sub New()
        End Sub
        Public Sub New(ByVal pstrMoveDate As String)
            Me.MoveDate = pstrMoveDate
        End Sub
        Public Overrides Function ToString() As String
            Return "<BR/>NewCustomer Move Date: " & Utility.DefaultString(m_moveDateField)
        End Function
    End Class

#End Region

End Class