Subversion Repositories DevTools

Rev

Rev 33 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<!-- #INCLUDE FILE="..\common\adovbs.inc" -->
<%
'=============================================================
'//
'//                                             Action Button Control
'//
'// version:            1.2
'//     last modified:  11-Aug-2004 14:08 by Sasha Vukovic
'=============================================================
%>
<%
'--------------- Global Constants ----------------
Const enumABTNCTRL_ON_READONLY_HIDE = 1
Const enumABTNCTRL_ON_READONLY_DISABLE = 2
'-------------------------------------------------

Class ActionButtonControl

        Private mArrAbtnDef()
        Private mobjNameDefMap                  ' Item can be accesed by name. Must be unique within one page
        Private mobjIdDefMap                    ' Item can be accesed by id. Must be unique within one page. If NULL, ubound is assigned to it
        Private mobjSeparator                   ' Has a name of item after separator is applied

        Private mnButtonSpacer
        Private mnButtonTextSpace

        Private mNumOfProperties
        Private mLastPropertyInx

        Private mbDisableAll

        Private mbIsReadonly
        Private mReadonlyActionBehaviour

        Private InxID
        Private InxName
        Private InxTxt
        Private InxLink
        Private InxEventHandler
        Private InxImg
        Private InxImgOff
        Private InxHint
        Private InxVisible
        Private InxActive
        Private InxIsReadonlyAction



        Public Property Let AllActive ( cActive )
                If cActive = enumDB_NO Then
                        mbDisableAll = TRUE
                Else
                        mbDisableAll = FALSE
                End If

        End Property

        Public Property Let ButtonSpacer ( nWidth )
                mnButtonSpacer = nWidth
        End Property

        Public Property Let ButtonTextSpacer ( nWidth )
                mnButtonTextSpace = nWidth
        End Property

        Public Property Let IsReadonlyAction ( IsReadonly )
                If IsReadonly = enumDB_YES Then
                        mbIsReadonly = TRUE

                ElseIf IsReadonly = enumDB_NO Then
                        mbIsReadonly = FALSE
                Else
                        mbIsReadonly = IsReadonly

                End If

        End Property

        Public Property Let ReadonlyActionBehaviour ( nEnum )
                mReadonlyActionBehaviour = nEnum
        End Property

        '-----------------------------------------------------------------------------------------------------------------
        Private Sub SetItemPropertyByIndex ( nInx, nProperty, Value )
                If nInx = ""  OR  nProperty = ""  OR  Value = "" Then Err.Raise 8, "Method SetItemPropertyByIndex", "Empty parameters found. nInx="& nInx &", nProperty="& nProperty &", Value="& Value

                mArrAbtnDef ( nProperty, nInx ) = Value

                'Response.write "mArrAbtnDef ( "& nProperty &", "& nInx &" ) = "& Value &"<br>"
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Function LastItemInx ()
                 LastItemInx = UBound ( mArrAbtnDef, 2 )
        End Function
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub AddActionButton ( sItemName, nItemID )
                Dim newArrayDim

                If InStr( sItemName, " " ) > 0 Then     Err.Raise 8, "Method AddActionButton", "Item Name '"& sItemName &"' cannot have spaces."



                If NOT mobjNameDefMap.Exists (CStr( sItemName )) Then

                        newArrayDim = LastItemInx() + 1

                        ReDim Preserve mArrAbtnDef( mNumOfProperties, newArrayDim )

                        ' Store name
                        Call SetItemPropertyByIndex ( newArrayDim, InxName, sItemName )
                        mobjNameDefMap.Add Cstr( sItemName ), CStr( newArrayDim )

                        If Not IsNull(nItemID) Then
                                ' Store ID
                                Call SetItemPropertyByIndex ( newArrayDim, InxdbID, nItemID )
                                mobjIdDefMap.Add Cstr( nItemID ), CStr( newArrayDim )
                        End If

                        ' Set Defaults
                        Call SetItemDefaults ( sItemName )
                Else

                        Err.Raise 8, "Method AddActionButton", "Item Name '"& sItemName &"' has been already defined."

                End If

        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Render ( aAbtnList )
                Dim itemInx, itemName, nLastItemInx, btnImage, ButtonStr, ButtonStrDisabled
                Response.write "<table cellpadding='0' cellspacing='0' width='1'><tr>"

                For Each itemName in aAbtnList

                        itemInx = mobjNameDefMap.Item (Cstr(itemName))
                        'If itemInx = "" Then   Err.Raise 8, "Method Render", "Definition for item name '"& itemName &"' not found."


                        '-- Define Image
                        btnImage = "<img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle' border='0'>"
                        If (mArrAbtnDef( InxImg, itemInx ) <> "") Then
                                btnImage = "<img src='"& mArrAbtnDef( InxImg, itemInx ) &"' hspace='"& mnButtonTextSpace &"' border='0' align='absmiddle'>"
                        End If

                        '-- Define Button
                        ButtonStr = _
                                "<td nowrap>"&_
                                "<a id='"& mArrAbtnDef( InxName, itemInx ) &"' "&_
                                " name='"& mArrAbtnDef( InxName, itemInx ) &"' href='"& Eval( mArrAbtnDef( InxLink, itemInx ) ) &"' "&_
                                " "& Eval( mArrAbtnDef( InxEventHandler, itemInx ) ) &" class='menu_link' title='"& mArrAbtnDef( InxHint, itemInx )  &"'>"&_
                                btnImage & mArrAbtnDef( InxTxt, itemInx ) &"</a>"&_
                                "</td>"


                        '-- Define Disabled Button
                        ButtonStrDisabled = _
                                "<td nowrap>"&_
                                "<img src='"& mArrAbtnDef( InxImgOff, itemInx ) &"' hspace='"& mnButtonTextSpace &"' border='0' align='absmiddle'>"&_
                                "<label class='menu_txt'>"& mArrAbtnDef( InxTxt, itemInx ) &"</label>"&_
                                "</td>"



                        If mArrAbtnDef( InxVisible, itemInx ) = enumDB_YES Then
                                ' --- Display if Visible ---

                                If  ( mbDisableAll OR ( mArrAbtnDef( InxActive, itemInx ) = enumDB_NO ) ) AND ( itemInx <> "" )  Then
                                        ' --- Display DISABLED Button Item ---
                                        Response.write ButtonStrDisabled

                                        If mnButtonSpacer > 0 Then
                                                Response.write "<td><img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle'></td>"
                                        End If

                                Else

                                        ' --- Display Action Button Item ---
                                        If      ( NOT mbIsReadonly )  OR _
                                                ( mbIsReadonly  AND  mArrAbtnDef( InxIsReadonlyAction, itemInx ) = enumDB_YES ) Then

                                                If InStr( itemName, "width=" ) > 0 Then
                                                        Response.write "<td><img src='images/spacer.gif' "& itemName &" height='1' align='absmiddle'></td>"

                                                ElseIf InStr( itemName, "height=" ) > 0 Then
                                                        Response.write "<td><img src='images/bg_bage_2.gif' width='1' "& itemName &" align='absmiddle' hspace='4'></td>"

                                                Else
                                                        '/* It is a button, i.e. Display Button */
                                                        Response.write ButtonStr

                                                        If mnButtonSpacer > 0 Then
                                                                Response.write "<td><img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle'></td>"
                                                        End If

                                                End If


                                        ElseIf ( mbIsReadonly  AND  mArrAbtnDef( InxIsReadonlyAction, itemInx ) = enumDB_NO ) Then



                                                If mReadonlyActionBehaviour = enumABTNCTRL_ON_READONLY_DISABLE Then
                                                        Response.write ButtonStrDisabled
                                                End If



                                        End If

                                End If

                        End If




                        ' --- Separators added manually using  method AddSeparator or AddSeparatorAfter ---
                        If mobjSeparator.Exists ( Cstr(mArrAbtnDef( InxName, itemInx )) ) Then
                                Response.write "<td><img src='images/spacer.gif' width='"& mobjSeparator.Item ( Cstr(mArrAbtnDef( InxName, itemInx )) ) &"' height='1'></td>"

                        End If


                Next

                Response.write "</tr></table>"
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
   ' Return true if required_abtnName is one of the strings in the aAbtnList string array, else return false
   Private Function isAbtnRequired (aAbtnList, required_abtnName)

      Dim this_abtnName

      isAbtnRequired = FALSE

      For Each this_abtnName in aAbtnList
         If 0 = StrComp(this_abtnName, required_abtnName) Then
            isAbtnRequired = TRUE
            Exit Function
         End If
      Next
   End Function
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub LoadActionButtons ( aAbtnList, ByRef objOraDatabase )

      ' The following code is now used in place of the earlier code to acquire action button records.
      '
      ' This code exploits the fact that in ADO 2.8 onwards, you can create ADO DB record sets
      ' without a connection to an actual database. So, to rid ourselves of the need for a DEF_ACTION_BUTTONS
      ' table in the database, we can simply take all of the table's rows and reproduce them here in row
      ' creation and field assignment statements. The rest of the website code will be ignorant of the fact
      ' that the data has not come from the actual database.
      '
      ' Complicating factors:
      ' 1) Some action button fields (action_link and event_handler) are to be EVAL'ed later on when used
      '    to render the HTML page. This can lead to some very complex looking strings that are difficult to
      '    understand. EVAL allows things like parRtag_id used in a string to be converted to an actual
      '    number (in string form) at time of HTML rendering. We have to use EVAL. There is no other option.
      '
      ' 2) The strings from the database must also be represented as VBScript strings in the assignments
      '    below. This means that where a string needs to have an embedded " char, two such chars must be
      '    used, and remember about EVAL mentioned above, meaning that sometimes """" has to be used to
      '    give a single " to the resulting string that pops out from EVAL.
      '    Remember also that whilst HTML doesn't care whether you use single or double quotes, javascript
      '    does (it must use single quotes) and VBScript does (it must use double quotes)
      '
      ' Possible Future Roadmap
      ' 1) Rid the code of ABTN_ID - I dont think we need this field now that we are free of the database
      ' 2) Given that DeploymentManager and ProductionManager shared the same database, some action buttons
      '    may well only be used by one of the two tools. We can remove those used by ProductionManager only,
      '    once we know which ones they are.
      '
      Dim rsQry
      Dim varFields
      Dim varValues

      ' Create the object and configure some of its properties
      Set rsQry = Server.CreateObject("ADODB.Recordset")
      rsQry.CursorLocation = adUseClient
      rsQry.CursorType = adOpenKeyset
      rsQry.LockType = adLockOptimistic

      ' Based upon the original DEF_ACTION_BUTTONS table DDL, define the fields (ie. table columns) being simulated
      rsQry.Fields.Append "ABTN_ID",               adInteger
      rsQry.Fields.Append "ABTN_NAME",             adVarChar,   64
      rsQry.Fields.Append "TEXT",                  adVarChar,  128, adFldIsNullable
      rsQry.Fields.Append "ACTION_LINK",           adVarChar,  512, adFldIsNullable
      rsQry.Fields.Append "EVENT_HANDLER",         adVarChar,  512, adFldIsNullable
      rsQry.Fields.Append "IMG_ENABLED",           adVarChar,  128, adFldIsNullable
      rsQry.Fields.Append "IMG_DISABLED",          adVarChar,  128, adFldIsNullable
      rsQry.Fields.Append "HINT",                  adVarChar,  256, adFldIsNullable
      rsQry.Fields.Append "VISIBLE",               adChar,       1
      rsQry.Fields.Append "ACTIVE",                adChar,       1
      rsQry.Fields.Append "IS_READONLY_ACTION",    adChar,       1

      ' open the record set for updating
      rsQry.Open

      ' Specify the field order that we are going to use in our row creation statements
      varFields = Array("ABTN_ID", "ABTN_NAME", "TEXT",_
                        "ACTION_LINK",_
                        "EVENT_HANDLER",_
                        "IMG_ENABLED",_
                        "IMG_DISABLED",_
                        "HINT",_
                        "VISIBLE",_
                        "ACTIVE",_
                        "IS_READONLY_ACTION")

      ' Add the rows to the record set, but only for buttons specifed in the list supplied by the caller

      ' Remember, Field Ordering is... ID, name, text, link, event handler, en-img, dis-img, hint, visible, active, is readonly action

      If isAbtnRequired(aAbtnList, "abtnNew") Then
         varValues = Array(  1, "abtnNew", null,_
                             """javascript:;""",_
                             """onClick=""""ToggleDisplay('divMenuOptionsABTNnew');""""""",_
                             "icons/abtn_add_with_option.gif",_
                             "icons/abtn_add_with_option_off.gif",_
                             "New...",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnNodeProperties") Then
         varValues = Array(  2, "abtnNodeProperties", null,_
                             """javascript:;""",_
                             """onClick=""""MM_openBrWindow('wEditNode.asp?node_id_list=""& objNodeCollector.Item(""node_id"") &""&rfile=""& SCRIPT_NAME & objPMod.ComposeURLWithout(""rfile"") &""','EditNode','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                             "icons/abtn_properties.gif",_
                             "icons/abtn_properties_off.gif",_
                             "Edit Network Node properties",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnNodeRemove") Then
         varValues = Array(  3, "abtnNodeRemove", null,_
                             """_DestroyNode.asp?rfile=BomDefault.asp&node_id_list=""& dbPARnode_id & objPMod.ComposeURLWithout(""node_id,rfile"")",_
                             """onClick=""""return confirmAction('Remove \'""& objNodeCollector.Item(""node_name"") &""\' from this BOM?');""""""",_
                             "icons/abtn_remove.gif",_
                             "icons/abtn_remove_off.gif",_
                             "Remove Network Node from this BOM",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnBomProperties") Then
         varValues = Array(  4, "abtnBomProperties", null,_
                             """javascript:;""",_
                             """onClick=""""MM_openBrWindow('wEditBom.asp?bom_id_list=""& Request(""bom_id"") &""&rfile=""& SCRIPT_NAME & objPMod.ComposeURLWithout(""rfile"") &""','EditBom','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                             "icons/abtn_properties.gif",_
                             "icons/abtn_properties_off.gif",_
                             "Edit Bom properties",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      ' NOTE: I do not think this one is ever used
      If isAbtnRequired(aAbtnList, "abtnNodeRemoveBulk") Then
         varValues = Array(  5, "abtnNodeRemoveBulk", null,_
                             """javascript:;""",_
                             """onClick=""""MM_openBrWindow('wRemoveBulkNodes.asp?rfile=BomDefault.asp&""& objPMod.ComposeURL() &""','RemoveBulkNodes','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                             "icons/abtn_remove.gif",_
                             "icons/abtn_remove_off.gif",_
                             "Remove Network Nodes from this BOM",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAddProd") Then
         varValues = Array(  6, "btnAddProd", "Add Product",_
                             """javascript:;""",_
                             """onClick=""""MM_openBrWindow('wAddProd.asp?rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','AddProd','scrollbars=yes,resizable=yes,width=600,height=500');""""""",_
                             "icons/btn_add.gif",_
                             null,_
                             null,_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAddOs") Then
         varValues = Array(  7, "btnAddOs", "Add OS",_
                             """javascript:;""",_
                             """onClick=""""MM_openBrWindow('wEditOs.asp?rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditOs','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                             "icons/btn_add.gif",_
                             null,_
                             "Add Operating System",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnCopyOs") Then
         varValues = Array(  8, "btnCopyOs", "Copy",_
                             """javascript:go_submit( document.FormName, """"btnCopyOs"""" );ShowProgress();""",_
                             null,_
                             "icons/btn_copy.gif",_
                             null,_
                             "Select and Copy Operating Systems",_
                             "Y",_
                             "Y",_
                             "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnPasteOs") Then
         varValues = Array(  9, "btnPasteOs", "Paste",_
                             """javascript:;""",_
                             """onClick=""""MM_openBrWindow('wPasteItems.asp?copy_type=os_id_list&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','PasteItems','scrollbars=yes,resizable=yes,width=400,height=500');""""""",_
                             "icons/btn_paste.gif",_
                             "icons/btn_paste_off.gif",_
                             "Paste Operating Systems here",_
                             "Y",_
                             "Y",_
                             "N")
         rsQry.AddNew varFields, varValues
      End If

      ' NOTE: I do not think this one is ever used
      If isAbtnRequired(aAbtnList, "btnMoveUpProd") Then
         varValues = Array( 10, "btnMoveUpProd", "Move Up",_
                            """javascript:go_submit( document.FormName, """"btnMoveUpProd"""" );ShowProgress();""",_
                            null,_
                            "icons/btn_move_up.gif",_
                            null,_
                            "Select Product(s) and Move Install Order Up",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      ' NOTE: I do not think this one is ever used
      If isAbtnRequired(aAbtnList, "btnMoveDownProd") Then
         varValues = Array( 11, "btnMoveDownProd", null,_
                            """javascript:go_submit( document.FormName, """"btnMoveDownProd"""" );ShowProgress();""",_
                            null,_
                            "icons/btn_move_down.gif",_
                            null,_
                            "Select Product(s) and Move Install Order Down",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnSyncProdLatest") Then
         varValues = Array( 12, "abtnSyncProdLatest", "Update Products",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wSyncProducts.asp?rfile=Bom_AllProducts.asp&""& objPMod.ComposeURL() &""','SyncProducts','scrollbars=yes,resizable=yes,width=1000,height=700');""""""",_
                            "icons/btn_sync.gif",_
                            "icons/btn_sync_off.gif",_
                            "Update Products from Release Manager...",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnAcceptRejectProd") Then
         varValues = Array( 13, "abtnAcceptRejectProd", null,_
                            """_AcceptRejectProd.asp?prod_id_list=""& Request(""prod_id"") &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL()",_
                            null,_
                            "icons/abtn_accept_reject_product.gif",_
                            "icons/abtn_accept_reject_product_off.gif",_
                            "Toggle Accept / Reject Product State",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAcceptRejectProd") Then
         varValues = Array( 14, "btnAcceptRejectProd", "Accept / Reject",_
                            """javascript:go_submit( document.FormName, """"btnAcceptRejectProd"""" );ShowProgress();""",_
                            null,_
                            "icons/btn_accept_reject_product.gif",_
                            "icons/btn_accept_reject_product_off.gif",_
                            "Accept / Reject Products",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnProdProperties") Then
         varValues = Array( 15, "abtnProdProperties", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditProd.asp?prod_id_list=""& Request(""prod_id"") &""&rfile=""& SCRIPT_NAME & objPMod.ComposeURLWithout(""rfile"") &""','EditProd','scrollbars=yes,resizable=yes,width=700,height=500');""""""",_
                            "icons/abtn_properties.gif",_
                            "icons/abtn_properties_off.gif",_
                            "Edit Product properties",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnProdRemove") Then
         varValues = Array( 16, "abtnProdRemove", null,_
                            """_RemoveProductFromOs.asp?rfile=""& SCRIPT_NAME &""&prod_id_list=""& dbPARprod_id & objPMod.ComposeURLWithout(""prod_id"")",_
                            """onClick=""""return confirmAction('Remove \'""& objProdCollector.Item(""pkg_name"") &"" ""& objProdCollector.Item(""pkg_version"") &""\' from this OS?');""""""",_
                            "icons/abtn_remove.gif",_
                            "icons/abtn_remove_off.gif",_
                            "Remove Product from this Operating System",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnOSProperties") Then
         varValues = Array( 17, "abtnOSProperties", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditOS.asp?os_id_list=""& dbPARos_id &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditOS','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                            "icons/abtn_properties.gif",_
                            "icons/abtn_properties_off.gif",_
                            "Edit Operating System properties",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnOSRemove") Then
         varValues = Array( 18, "abtnOSRemove", null,_
                            """_DestroyOs.asp?rfile=""& SCRIPT_NAME &""&node_id=""& dbPARnode_id &""&os_id_list=""& dbPARos_id & objPMod.ComposeURLWithout(""os_id"")",_
                            """onClick=""""return confirmAction('Remove \'""& objOsCollector.Item(""os_name"") &""\' from this Network Node?');""""""",_
                            "icons/abtn_remove.gif",_
                            "icons/abtn_remove_off.gif",_
                            "Remove Operating System from this Network Node",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnCopyProd") Then
         varValues = Array( 19, "btnCopyProd", "Copy",_
                            """javascript:go_submit( document.FormName, """"btnCopyProd"""" );ShowProgress();""",_
                            null,_
                            "icons/btn_copy.gif",_
                            null,_
                            "Select and Copy Product",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnPasteProd") Then
         varValues = Array( 20, "btnPasteProd", "Paste",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wPasteItems.asp?copy_type=prod_id_list&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','PasteItems','scrollbars=yes,resizable=yes,width=400,height=500');""""""",_
                            "icons/btn_paste.gif",_
                            "icons/btn_paste_off.gif",_
                            "Paste Product here",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnEditProd") Then
         varValues = Array( 21, "btnEditProd", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditProd.asp?prod_id_list=""& ProdId &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditProd','scrollbars=yes,resizable=yes,width=700,height=500');""""""",_
                            "icons/i_edit.gif",_
                            "icons/i_edit_off.gif",_
                            "Edit this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveProd") Then
         varValues = Array( 22, "btnRemoveProd", null,_
                            """_RemoveProductFromOs.asp?rfile=""& SCRIPT_NAME &""&prod_id_list=""& ProdId &""&""& objPMod.ComposeURL()",_
                            """onClick=""""return confirmAction('Remove \'""& ProdName &"" ""& ProdVersion &""\' from this list?');""""""",_
                            "icons/i_remove.gif",_
                            "icons/i_remove_off.gif",_
                            "Remove this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveOS") Then
         varValues = Array( 23, "btnRemoveOS", null,_
                            """_DestroyOs.asp?rfile=""& SCRIPT_NAME &""&os_id_list=""& OsId &""&""& objPMod.ComposeURL()",_
                            """onClick=""""return confirmAction('Remove \'""& OsName &""\' from this list?');""""""",_
                            "icons/i_remove.gif",_
                            "icons/i_remove_off.gif",_
                            "Remove this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnEditOS") Then
         varValues = Array( 24, "btnEditOS", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditOS.asp?os_id_list=""& OsId &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditOS','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                            "icons/i_edit.gif",_
                            "icons/i_edit_off.gif",_
                            "Edit this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAddBaseEnv") Then
         varValues = Array( 25, "btnAddBaseEnv", "Add Base Configuration",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditBaseEnv.asp?rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditBaseEnv','scrollbars=yes,resizable=yes,width=600,height=300');""""""",_
                            "icons/btn_add.gif",_
                            null,_
                            "Add Base Configuration",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnDestroyBaseEnv") Then
         varValues = Array( 26, "btnDestroyBaseEnv", "Destroy Base Configuration",_
                            """_DestroyBaseEnv.asp?rfile=""& SCRIPT_NAME &""&base_env_id=""& BaseEnvId &""&""& objPMod.ComposeURL()",_
                            """onClick=""""return confirmAction('Remove \'""& BaseEnvName &""\' from this BOM?');""""""",_
                            "icons/btn_remove.gif",_
                            "icons/btn_remove_off.gif",_
                            "Destroy Base Configuration",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      ' NOTE: I do not think this one is ever used
      If isAbtnRequired(aAbtnList, "btnBomHistory") Then
         varValues = Array( 27, "btnBomHistory", "History",_
                            """BomAllHistory.asp?""& objPMod.ComposeURL()",_
                            null,_
                            "icons/btn_history.gif",_
                            null,_
                            "History of All BOMs",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveProdBulk") Then
         varValues = Array( 28, "btnRemoveProdBulk", null,_
                            """javascript:go_submit( document.FormName, """"btnRemoveProdBulk"""" );ShowProgress();""",_
                            """onClick=""""return confirmAction('Remove selected Products from this OS?');""""""",_
                            "icons/btn_remove.gif",_
                            "icons/btn_remove_off.gif",_
                            "Remove selected Products from this OS",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveOsBulk") Then
         varValues = Array( 29, "btnRemoveOsBulk", null,_
                            """javascript:go_submit( document.FormName, """"btnRemoveOsBulk"""" );ShowProgress();""",_
                            """onClick=""""return confirmAction('Remove selected OS from this Network Node?');""""""",_
                            "icons/btn_remove.gif",_
                            "icons/btn_remove_off.gif",_
                            "Remove selected OS from this Network Node",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnPropertiesBaseEnv") Then
         varValues = Array( 30, "btnPropertiesBaseEnv", "Properties",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditBaseEnv.asp?base_env_id=""& BaseEnvId &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditBaseEnv','scrollbars=yes,resizable=yes,width=600,height=300');""""""",_
                            "icons/btn_properties.gif",_
                            "icons/btn_properties_off.gif",_
                            "Edit Base Configuration Properties",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnEditNode") Then
         varValues = Array( 31, "btnEditNode", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditNode.asp?node_id_list=""& NodeId &""&rfile=""& SCRIPT_NAME & objPMod.ComposeURLWithout(""rfile"") &""','EditNode','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                            "icons/i_edit.gif",_
                            "icons/i_edit_off.gif",_
                            "Edit this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveNode") Then
         varValues = Array( 32, "btnRemoveNode", null,_
                            """_DestroyNode.asp?rfile=""& SCRIPT_NAME &""&node_id_list=""& NodeId & objPMod.ComposeURLWithout(""node_id,rfile"")",_
                            """onClick=""""return confirmAction('Remove \'""& NodeName &""\' from this BOM?');""""""",_
                            "icons/i_remove.gif",_
                            "icons/i_remove_off.gif",_
                            "Remove Network Node from this BOM",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAddNode") Then
         varValues = Array( 33, "btnAddNode", "Add Network Node",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditNode.asp?node_id_list=""& NodeId &""&rfile=""& SCRIPT_NAME & objPMod.ComposeURLWithout(""rfile"") &""','EditNode','scrollbars=yes,resizable=yes,width=600,height=350');""""""",_
                            "icons/btn_add.gif",_
                            null,_
                            "Add Network Node",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveNodeBulk") Then
         varValues = Array( 34, "btnRemoveNodeBulk", null,_
                            """javascript:go_submit( document.FormName, """"btnRemoveNodeBulk"""" );ShowProgress();""",_
                            """onClick=""""return confirmAction('Remove selected Network Node from this BOM?');""""""",_
                            "icons/btn_remove.gif",_
                            "icons/btn_remove_off.gif",_
                            "Remove selected Network Node from this BOM",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnPasteNode") Then
         varValues = Array( 35, "btnPasteNode", "Paste",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wPasteItems.asp?copy_type=node_id_list&rfile=""& SCRIPT_NAME & objPMod.ComposeURLWithout(""rfile"") &""','PasteItems','scrollbars=yes,resizable=yes,width=400,height=500');""""""",_
                            "icons/btn_paste.gif",_
                            "icons/btn_paste_off.gif",_
                            "Paste Network Nodes here",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnCopyNode") Then
         varValues = Array( 36, "btnCopyNode", "Copy",_
                            """javascript:go_submit( document.FormName, """"btnCopyNode"""" );ShowProgress();""",_
                            null,_
                            "icons/btn_copy.gif",_
                            null,_
                            "Select and Copy Network Nodes",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAddBaseEnvProd") Then
         varValues = Array( 37, "btnAddBaseEnvProd", "Add Product",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wAddProd.asp?rfile=""& SCRIPT_NAME &""&base_env_id=""& BaseEnvId &""&""  & objPMod.ComposeURL() &""','AddProd','scrollbars=yes,resizable=yes,width=600,height=500');""""""",_
                            "icons/btn_add.gif",_
                            null,_
                            null,_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnEditProdBaseEnv") Then
         varValues = Array( 38, "btnEditProdBaseEnv", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditProd.asp?prod_id_list=""& ProdId &""&base_env_id=""& objOsCollector.Item(""base_env_id"") &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditProd','scrollbars=yes,resizable=yes,width=700,height=500');""""""",_
                            "icons/i_edit.gif",_
                            "icons/i_edit_off.gif",_
                            "Edit this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveProdBaseEnv") Then
         varValues = Array( 39, "btnRemoveProdBaseEnv", null,_
                            """_RemoveProductFromBaseEnv.asp?rfile=""& SCRIPT_NAME &""&base_env_id=""& BaseEnvId &""&prod_id_list=""& ProdId &""&""& objPMod.ComposeURL()",_
                            """onClick=""""return confirmAction('Remove \'""& ProdName &""\' from this list?');""""""",_
                            "icons/i_remove.gif",_
                            "icons/i_remove_off.gif",_
                            "Remove this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnRMlink") Then
         varValues = Array( 40, "abtnRMlink", null,_
                            "RELEASE_MANAGER_URL &""/fixed_issues.asp?rtag_id=""& objProdCollector.Item(""rtag_id"") &""&pv_id=""& objProdCollector.Item(""pv_id"")",_
                            """target='_blank'""",_
                            "icons/abtn_rm_link.gif",_
                            null,_
                            "Open in Release Manager...",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnExportNodespec") Then
         varValues = Array( 41, "btnExportNodespec", "Export Node Spec",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wNodeSpec.asp?ostab=""&Request(""os_id"")&""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','ExportNodeSpec','scrollbars=yes,resizable=yes,width=550,height=450');""""""",_
                            "icons/abtn_export_nodespec.gif",_
                            null,_
                            "Export Node Spec",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnSortProd") Then
         varValues = Array( 42, "btnSortProd", "Sort",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wSortProd.asp?rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','SortProd','scrollbars=yes,resizable=yes,width=500,height=800');""""""",_
                            "icons/btn_sort.gif",_
                            null,_
                            "Sort Products",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnPasteProdToBaseEnv") Then
         varValues = Array( 43, "btnPasteProdToBaseEnv", "Paste",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wPasteItems.asp?base_env_id=""& objOsCollector.Item(""base_env_id"") &""&copy_type=prod_id_list&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','PasteItems','scrollbars=yes,resizable=yes,width=400,height=500');""""""",_
                            "icons/btn_paste.gif",_
                            "icons/btn_paste_off.gif",_
                            "Paste Product here",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnSortNode") Then
         varValues = Array( 44, "btnSortNode", "Sort",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wSortNode.asp?rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','SortNode','scrollbars=yes,resizable=yes,width=500,height=800');""""""",_
                            "icons/btn_sort.gif",_
                            null,_
                            "Sort Nodes",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnSortBase") Then
         varValues = Array( 45, "btnSortBase", "Sort",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wsortBase.asp?rfile=""& SCRIPT_NAME &""&base_env_id=""& BaseEnvId &""&prod_id_list=""& ProdId &""&""& objPMod.ComposeURL() &""','SortNode','scrollbars=yes,resizable=yes,width=500,height=800');""""""",_
                            "icons/btn_sort.gif",_
                            null,_
                            "Sort Base",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      ' NOTE: I do not think this one is ever used
      If isAbtnRequired(aAbtnList, "btnNewVersion") Then
         varValues = Array( 46, "btnNewVersion", null,_
                            """javascript:go_submit( document.FormName, """"btnNewVersion"""" );ShowProgress();""",_
                            """onClick=""""return confirmAction('Do you really want to add new product version?');""""""",_
                            "images/abtn_new_version.gif",_
                            null,_
                            "Add new version of a product",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnPatchGenerate") Then
         varValues = Array( 47, "btnPatchGenerate", "Patch List",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('run_patch_GUI.asp?project=""& rsQry(""proj_name"") &""&release=""& rsQry(""branch_name"") &""&sbom=""& rsQry(""sbom_version"") &""&version=""& rsQry(""bom_version"") &""&lifecycle=""& rsQry(""bom_lifecycle"") &""&node="" &rsQry(""node_name"") &""&OS="" &rsQry(""os_name"") &""','PatchGenerator','scrollbars=yes,resizable=yes,width=500,height=600');""""""",_
                            "icons/i_patch_small.gif",_
                            null,_
                            "Displays the patches to be installed for this node",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnAddProc") Then
         varValues = Array( 48, "btnAddProc", "Add Process",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wAddProc.asp?rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','AddProd','scrollbars=yes,resizable=yes,width=800,height=500');""""""",_
                            "icons/btn_add.gif",_
                            null,_
                            null,_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveProc") Then
         varValues = Array( 49, "btnRemoveProc", null,_
                            """_RemoveProcessFromOs.asp?rfile=""& SCRIPT_NAME &""&pkg_owner=""& Owner &""&run_as=""& RunAs &""&interface=""& Interface &""&proc_name=""& ProcName &""&proc_id_list=""& ProcId &""&""& objPMod.ComposeURL()",_
                            """onClick=""""return confirmAction('Remove \'""& ProcName &""\' from this list?');""""""",_
                            "icons/i_remove.gif",_
                            "icons/i_remove_off.gif",_
                            "Remove this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnEditProc") Then
         varValues = Array( 50, "btnEditProc", null,_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wEditProc.asp?proc_name=""& ProcName &""&proc_id_list=""& ProcId &""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','EditProc','scrollbars=yes,resizable=yes,width=700,height=500');""""""",_
                            "icons/i_edit.gif",_
                            "icons/i_edit_off.gif",_
                            "Edit this entry",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnNodeSpec") Then
         varValues = Array( 51, "btnNodeSpec", null,_
                            """NodeSpecBomGen.asp?bom_id=""&dbPARbom_id&""""",_
                            null,_
                            "icons/b_nodespec.gif",_
                            null,_
                            "Generate the node spec files based on the nodespec filename existence.",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnIsNodeSpec") Then
         varValues = Array( 52, "btnIsNodeSpec", null,_
                            """javascript:go_submit( document.FormName, """"btnIsNodeSpec"""" );ShowProgress();""",_
                            """onClick=""""return confirmAction('Add selected Products from this OS to the Node Spec File?');""""""",_
                            "icons/b_nodespec.gif",_
                            null,_
                            "Include in node spec file.",_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnUnhideProducts") Then
         varValues = Array( 53, "abtnUnhideProducts", "Unhide Products",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wUnhideProducts.asp?rfile=Bom_AllProducts.asp&""& objPMod.ComposeURL() &""','UnhideProducts','scrollbars=yes,resizable=yes,width=1000,height=700');""""""",_
                            "icons/bi_cancel.gif",_
                            null,_
                            "Unhide Products that are hidden.",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnRemoveObsoletePatches") Then
         varValues = Array( 54, "btnRemoveObsoletePatches", "Remove",_
                            """javascript:go_submit( document.FormName, """"btnRemoveObsoletePatches"""" );ShowProgress();""",_
                            """onClick=""""return confirmAction('Remove obsolete patches from this OS?');""""""",_
                            "icons/i_patch_small_obsolete.gif",_
                            null,_
                            null,_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      ' NOTE: I do not think this one is ever used
      If isAbtnRequired(aAbtnList, "abtnAddPatches") Then
         varValues = Array( 55, "abtnAddPatches", "Add Patches",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wSyncProducts.asp?rfile=Bom_AllProducts.asp&""& objPMod.ComposeURL() &""','SyncProducts','scrollbars=yes,resizable=yes,width=1400,height=1000');""""""",_
                            "icons\i_patch_small.gif",_
                            null,_
                            "Add Patches from Deployment Release",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "abtnRevertProdLatest") Then
         varValues = Array( 56, "abtnRevertProdLatest", "Revert Products",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wRevertProducts.asp?rfile=Bom_AllProducts.asp&""& objPMod.ComposeURL() &""','SyncProducts','scrollbars=yes,resizable=yes,width=1400,height=1000');""""""",_
                            "icons/btn_sync.gif",_
                            "icons/btn_sync_off.gif",_
                            "Update Products from Release Manager...",_
                            "Y",_
                            "Y",_
                            "N")
         rsQry.AddNew varFields, varValues
      End If

      If isAbtnRequired(aAbtnList, "btnFTP") Then
         varValues = Array( 57, "btnFTP", "Export FTP script",_
                            """javascript:;""",_
                            """onClick=""""MM_openBrWindow('wFTP.asp?ostab=""&Request(""os_id"")&""&rfile=""& SCRIPT_NAME &""&""& objPMod.ComposeURL() &""','ExportFTP','scrollbars=yes,resizable=yes,width=550,height=450');""""""",_
                            null,_
                            null,_
                            null,_
                            "Y",_
                            "Y",_
                            "Y")
         rsQry.AddNew varFields, varValues
      End If

      ' Move cursor to the first record
      rsQry.MoveFirst

                If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
                        Call LoadButtons ( rsQry.GetRows() )

                End If

                rsQry.Close
                Set rsQry = Nothing
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub LoadButtons ( aRows )
                Dim nProperty, newArrayDim, LastRow, rowNum

                LastRow = UBound( aRows, 2 )

                For rowNum = 0 To LastRow
                        ' Increase array by 1
                        newArrayDim = LastRowInx() + 1
                        ReDim Preserve mArrAbtnDef( mNumOfProperties, newArrayDim )


                        mobjNameDefMap.Item ( Cstr( aRows ( InxName, rowNum ) ) ) = newArrayDim

                        For nProperty = 0 To mLastPropertyInx
                                mArrAbtnDef ( nProperty, newArrayDim ) = aRows ( nProperty, rowNum )

                        Next

                Next

        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Function LastRowInx ()
                 LastRowInx = UBound ( mArrAbtnDef, 2 )
        End Function
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub AddSeparatorAfter ( sItemName, sSeparatorWidth )
                If InStr( sItemName, " " ) > 0 Then     Err.Raise 8, "Method AddSeparatorAfter", "Item Name '"& sItemName &"' cannot have spaces."
                mobjSeparator.Add (Cstr(sItemName)), CStr(sSeparatorWidth)
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub AddSeparator ( sSeparatorWidth )
                mobjSeparator.Add ( Cstr(mArrAbtnDef(InxName, LastItemInx())) ), CStr(sSeparatorWidth)
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub SetItemDefaults ( sItemName )
                ' Additional default setup
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, enumDB_YES )                    ' Default Active = enumDB_YES
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Text ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxTxt, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub ItemID ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxID, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Image ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxImg, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxImgOff, Value )                 ' Default image disable to be the same as image
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub ImageOff ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxImgOff, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Link ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxLink, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub EventHandler ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxEventHandler, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Hint ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxHint, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Visible ( sItemName, Value )
                'Response.write sItemName &"here"& mobjNameDefMap.Item (Cstr(sItemName))
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxVisible, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Active ( sItemName, Value )
                'Response.write sItemName &"here"& mobjNameDefMap.Item (Cstr(sItemName))
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub Class_Initialize()
                '// Perform action on creation of object. e.g. Set myObj = New ThisClassName
                Set mobjNameDefMap = CreateObject("Scripting.Dictionary")
                Set mobjIdDefMap = CreateObject("Scripting.Dictionary")
                Set mobjSeparator = CreateObject("Scripting.Dictionary")

                'mbIsReadonly = FALSE   ' Tell control that it should use only readonly action buttons (i.e. actions which will not alter database )
                mReadonlyActionBehaviour = enumABTNCTRL_ON_READONLY_HIDE                ' Tell control what to do by default if mbIsReadonly = TRUE

                mnButtonSpacer = 0
                mnButtonTextSpace = 4

                mNumOfProperties = 11   ' Number of properties in array which define one menu item.
                mLastPropertyInx = mNumOfProperties - 1

                mbDisableAll = FALSE

                ReDim mArrAbtnDef ( mNumOfProperties, -1 )
                InxID                                   = 0
                InxName                                 = 1
                InxTxt                                  = 2
                InxLink                                 = 3
                InxEventHandler                 = 4
                InxImg                                  = 5
                InxImgOff                               = 6
                InxHint                                 = 7
                InxVisible                              = 8
                InxActive                               = 9
                InxIsReadonlyAction             = 10

        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub Class_Terminate()
                '// Perform action on object disposal. e.g. Set myObj = Nothing
                Set mobjNameDefMap = Nothing
                Set mobjIdDefMap = Nothing
                Set mobjSeparator = Nothing


        End Sub
        '-----------------------------------------------------------------------------------------------------------------
End Class
%>