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 = 1Const enumABTNCTRL_ON_READONLY_DISABLE = 2'-------------------------------------------------Class ActionButtonControlPrivate mArrAbtnDef()Private mobjNameDefMap ' Item can be accesed by name. Must be unique within one pagePrivate mobjIdDefMap ' Item can be accesed by id. Must be unique within one page. If NULL, ubound is assigned to itPrivate mobjSeparator ' Has a name of item after separator is appliedPrivate mnButtonSpacerPrivate mnButtonTextSpacePrivate mNumOfPropertiesPrivate mLastPropertyInxPrivate mbDisableAllPrivate mbIsReadonlyPrivate mReadonlyActionBehaviourPrivate InxIDPrivate InxNamePrivate InxTxtPrivate InxLinkPrivate InxEventHandlerPrivate InxImgPrivate InxImgOffPrivate InxHintPrivate InxVisiblePrivate InxActivePrivate InxIsReadonlyActionPublic Property Let AllActive ( cActive )If cActive = enumDB_NO ThenmbDisableAll = TRUEElsembDisableAll = FALSEEnd IfEnd PropertyPublic Property Let ButtonSpacer ( nWidth )mnButtonSpacer = nWidthEnd PropertyPublic Property Let ButtonTextSpacer ( nWidth )mnButtonTextSpace = nWidthEnd PropertyPublic Property Let IsReadonlyAction ( IsReadonly )If IsReadonly = enumDB_YES ThenmbIsReadonly = TRUEElseIf IsReadonly = enumDB_NO ThenmbIsReadonly = FALSEElsembIsReadonly = IsReadonlyEnd IfEnd PropertyPublic Property Let ReadonlyActionBehaviour ( nEnum )mReadonlyActionBehaviour = nEnumEnd 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="& ValuemArrAbtnDef ( 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 newArrayDimIf InStr( sItemName, " " ) > 0 Then Err.Raise 8, "Method AddActionButton", "Item Name '"& sItemName &"' cannot have spaces."If NOT mobjNameDefMap.Exists (CStr( sItemName )) ThennewArrayDim = LastItemInx() + 1ReDim Preserve mArrAbtnDef( mNumOfProperties, newArrayDim )' Store nameCall SetItemPropertyByIndex ( newArrayDim, InxName, sItemName )mobjNameDefMap.Add Cstr( sItemName ), CStr( newArrayDim )If Not IsNull(nItemID) Then' Store IDCall SetItemPropertyByIndex ( newArrayDim, InxdbID, nItemID )mobjIdDefMap.Add Cstr( nItemID ), CStr( newArrayDim )End If' Set DefaultsCall SetItemDefaults ( sItemName )ElseErr.Raise 8, "Method AddActionButton", "Item Name '"& sItemName &"' has been already defined."End IfEnd Sub'-----------------------------------------------------------------------------------------------------------------Public Sub Render ( aAbtnList )Dim itemInx, itemName, nLastItemInx, btnImage, ButtonStr, ButtonStrDisabledResponse.write "<table cellpadding='0' cellspacing='0' width='1'><tr>"For Each itemName in aAbtnListitemInx = mobjNameDefMap.Item (Cstr(itemName))'If itemInx = "" Then Err.Raise 8, "Method Render", "Definition for item name '"& itemName &"' not found."'-- Define ImagebtnImage = "<img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle' border='0'>"If (mArrAbtnDef( InxImg, itemInx ) <> "") ThenbtnImage = "<img src='"& mArrAbtnDef( InxImg, itemInx ) &"' hspace='"& mnButtonTextSpace &"' border='0' align='absmiddle'>"End If'-- Define ButtonButtonStr = _"<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 ButtonButtonStrDisabled = _"<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 ButtonStrDisabledIf mnButtonSpacer > 0 ThenResponse.write "<td><img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle'></td>"End IfElse' --- Display Action Button Item ---If ( NOT mbIsReadonly ) OR _( mbIsReadonly AND mArrAbtnDef( InxIsReadonlyAction, itemInx ) = enumDB_YES ) ThenIf InStr( itemName, "width=" ) > 0 ThenResponse.write "<td><img src='images/spacer.gif' "& itemName &" height='1' align='absmiddle'></td>"ElseIf InStr( itemName, "height=" ) > 0 ThenResponse.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 ButtonStrIf mnButtonSpacer > 0 ThenResponse.write "<td><img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle'></td>"End IfEnd IfElseIf ( mbIsReadonly AND mArrAbtnDef( InxIsReadonlyAction, itemInx ) = enumDB_NO ) ThenIf mReadonlyActionBehaviour = enumABTNCTRL_ON_READONLY_DISABLE ThenResponse.write ButtonStrDisabledEnd IfEnd IfEnd IfEnd If' --- Separators added manually using method AddSeparator or AddSeparatorAfter ---If mobjSeparator.Exists ( Cstr(mArrAbtnDef( InxName, itemInx )) ) ThenResponse.write "<td><img src='images/spacer.gif' width='"& mobjSeparator.Item ( Cstr(mArrAbtnDef( InxName, itemInx )) ) &"' height='1'></td>"End IfNextResponse.write "</tr></table>"End Sub'-----------------------------------------------------------------------------------------------------------------' Return true if required_abtnName is one of the strings in the aAbtnList string array, else return falsePrivate Function isAbtnRequired (aAbtnList, required_abtnName)Dim this_abtnNameisAbtnRequired = FALSEFor Each this_abtnName in aAbtnListIf 0 = StrComp(this_abtnName, required_abtnName) ThenisAbtnRequired = TRUEExit FunctionEnd IfNextEnd 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 rsQryDim varFieldsDim varValues' Create the object and configure some of its propertiesSet rsQry = Server.CreateObject("ADODB.Recordset")rsQry.CursorLocation = adUseClientrsQry.CursorType = adOpenKeysetrsQry.LockType = adLockOptimistic' Based upon the original DEF_ACTION_BUTTONS table DDL, define the fields (ie. table columns) being simulatedrsQry.Fields.Append "ABTN_ID", adIntegerrsQry.Fields.Append "ABTN_NAME", adVarChar, 64rsQry.Fields.Append "TEXT", adVarChar, 128, adFldIsNullablersQry.Fields.Append "ACTION_LINK", adVarChar, 512, adFldIsNullablersQry.Fields.Append "EVENT_HANDLER", adVarChar, 512, adFldIsNullablersQry.Fields.Append "IMG_ENABLED", adVarChar, 128, adFldIsNullablersQry.Fields.Append "IMG_DISABLED", adVarChar, 128, adFldIsNullablersQry.Fields.Append "HINT", adVarChar, 256, adFldIsNullablersQry.Fields.Append "VISIBLE", adChar, 1rsQry.Fields.Append "ACTIVE", adChar, 1rsQry.Fields.Append "IS_READONLY_ACTION", adChar, 1' open the record set for updatingrsQry.Open' Specify the field order that we are going to use in our row creation statementsvarFields = 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 actionIf isAbtnRequired(aAbtnList, "abtnNew") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnNodeProperties") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnNodeRemove") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnBomProperties") ThenvarValues = 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, varValuesEnd If' NOTE: I do not think this one is ever usedIf isAbtnRequired(aAbtnList, "abtnNodeRemoveBulk") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAddProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAddOs") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnCopyOs") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnPasteOs") ThenvarValues = 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, varValuesEnd If' NOTE: I do not think this one is ever usedIf isAbtnRequired(aAbtnList, "btnMoveUpProd") ThenvarValues = 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, varValuesEnd If' NOTE: I do not think this one is ever usedIf isAbtnRequired(aAbtnList, "btnMoveDownProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnSyncProdLatest") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnAcceptRejectProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAcceptRejectProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnProdProperties") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnProdRemove") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnOSProperties") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnOSRemove") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnCopyProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnPasteProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnEditProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveOS") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnEditOS") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAddBaseEnv") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnDestroyBaseEnv") ThenvarValues = 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, varValuesEnd If' NOTE: I do not think this one is ever usedIf isAbtnRequired(aAbtnList, "btnBomHistory") ThenvarValues = Array( 27, "btnBomHistory", "History",_"""BomAllHistory.asp?""& objPMod.ComposeURL()",_null,_"icons/btn_history.gif",_null,_"History of All BOMs",_"Y",_"Y",_"Y")rsQry.AddNew varFields, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveProdBulk") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveOsBulk") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnPropertiesBaseEnv") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnEditNode") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveNode") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAddNode") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveNodeBulk") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnPasteNode") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnCopyNode") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAddBaseEnvProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnEditProdBaseEnv") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveProdBaseEnv") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnRMlink") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnExportNodespec") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnSortProd") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnPasteProdToBaseEnv") ThenvarValues = Array( 43, "btnPasteProdToBaseEnv", "Paste",_"""javascript:;""",_"""onClick=""""MM_openBrWindow('wPasteItems.asp?base_env_id=""& objOsCollector.Item(""base_env_id"") &""©_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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnSortNode") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnSortBase") ThenvarValues = 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, varValuesEnd If' NOTE: I do not think this one is ever usedIf isAbtnRequired(aAbtnList, "btnNewVersion") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnPatchGenerate") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnAddProc") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveProc") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnEditProc") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnNodeSpec") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnIsNodeSpec") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnUnhideProducts") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnRemoveObsoletePatches") ThenvarValues = 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, varValuesEnd If' NOTE: I do not think this one is ever usedIf isAbtnRequired(aAbtnList, "abtnAddPatches") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "abtnRevertProdLatest") ThenvarValues = 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, varValuesEnd IfIf isAbtnRequired(aAbtnList, "btnFTP") ThenvarValues = 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, varValuesEnd If' Move cursor to the first recordrsQry.MoveFirstIf ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) ThenCall LoadButtons ( rsQry.GetRows() )End IfrsQry.CloseSet rsQry = NothingEnd Sub'-----------------------------------------------------------------------------------------------------------------Public Sub LoadButtons ( aRows )Dim nProperty, newArrayDim, LastRow, rowNumLastRow = UBound( aRows, 2 )For rowNum = 0 To LastRow' Increase array by 1newArrayDim = LastRowInx() + 1ReDim Preserve mArrAbtnDef( mNumOfProperties, newArrayDim )mobjNameDefMap.Item ( Cstr( aRows ( InxName, rowNum ) ) ) = newArrayDimFor nProperty = 0 To mLastPropertyInxmArrAbtnDef ( nProperty, newArrayDim ) = aRows ( nProperty, rowNum )NextNextEnd 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 setupCall SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, enumDB_YES ) ' Default Active = enumDB_YESEnd 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 imageEnd 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 ThisClassNameSet 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 = TRUEmnButtonSpacer = 0mnButtonTextSpace = 4mNumOfProperties = 11 ' Number of properties in array which define one menu item.mLastPropertyInx = mNumOfProperties - 1mbDisableAll = FALSEReDim mArrAbtnDef ( mNumOfProperties, -1 )InxID = 0InxName = 1InxTxt = 2InxLink = 3InxEventHandler = 4InxImg = 5InxImgOff = 6InxHint = 7InxVisible = 8InxActive = 9InxIsReadonlyAction = 10End Sub'-----------------------------------------------------------------------------------------------------------------Private Sub Class_Terminate()'// Perform action on object disposal. e.g. Set myObj = NothingSet mobjNameDefMap = NothingSet mobjIdDefMap = NothingSet mobjSeparator = NothingEnd Sub'-----------------------------------------------------------------------------------------------------------------End Class%>