Subversion Repositories DevTools

Rev

Rev 5725 | Rev 6189 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'|
'|  diff.asp
'|
'=====================================================
%>
<%
Option explicit
' Good idea to set when using redirect
Response.Expires = 0    ' always load the page, dont store
%>
<%
'To enable the script timeout to 20 mins
Server.ScriptTimeout=1200
%>
<!--#include file="common/conf.asp"-->
<!--#include file="common/globals.asp"-->
<!--#include file="common/formating.asp"-->
<!--#include file="common/qstr.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="common/common_dbedit.asp"-->
<!--#include file="common/_form_window_common.asp"-->
<!--#include file="common/_rtree_common.asp"-->
<%
'------------ ACCESS CONTROL ------------------
%>
<!--#include file="_access_control_login.asp"-->
<!--#include file="_access_control_general.asp"-->
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT>
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT> 
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/jiraIssues.vbs"></SCRIPT> 
<%
'------------ Variable Definition -------------
Dim rsQry
Dim objRelCollectorA
Dim objRelCollectorB
Dim parRtagA
Dim parRtagB
Dim dDiffFilter
Dim colorA, colorB, ChangeTypeIcon
Dim btnMerge, btnRemove
Dim rowId
Dim email
Dim genReport
Dim FSO
Dim NewTextFile
Dim pkgA, pkgB, pkgname, delimiter, rsQryA, rsQryB, rsQryCommentsA, rsQryCommentsB, sqlstrA, counterA, sqlstrB, counterB
Dim SSsql, retVal, rsCQ, DEVIiss
Dim a, b, c, d, pkgversion, errormsg, ChangeASource, ChangeAUpdate, ChangeBSource, ChangeBUpdate, pvCollectionA, pvCollectionB
Dim source_change, scFlag
Dim changeType
Dim pendingAdditions
Dim isaSdk                  ' Target is an SDK based package
Dim isMergable              ' Target package can be modified

'------------ Constants Declaration -----------
Const LIMG_UPDATED = "<img src='images/i_updated.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Updated'>"
Const LIMG_RIPPLED = "<img src='images/i_rippled.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Rippled'>"
Const LIMG_ADDED = "<img src='images/i_added.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Added'>"
Const LIMG_REMOVED = "<img src='images/i_removed.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Removed'>"
Const LIMG_FILTER_ON = "<img src='images/i_data_table.gif' border='0' align='absmiddle' hspace='0' title='Filter in use.'>"
Const LIMG_FILTER_OFF = "<img src='images/i_data_table_off.gif' border='0' align='absmiddle' hspace='0' title='Filter not in use.'>"
Const LIMG_DROP_DOWN_ARROW = "<img src='images/i_drop_down_arrow.gif' width='5' height='15' hspace='1' border='0' align='absmiddle'>"
Const LCOLOR_NOT_CHANGED = "#F5F5F5"
Const LCOLOR_CHANGED = "#d2f7c9"
Const LCOLOR_RIPPLED = "#D8F8F8"
Const LCOLOR_BLANK = "#FFFFFF"
Const LIMG_MERGE = "<img src='images/bt_move_all_right.gif' title='Click to merge.' border='0'>"
Const LIMG_MERGE_WARN = "<img src='images/bt_move_warn_right.gif' title='Right hand side version is newer.' border='0'>"
Const LIMG_REMOVE = "<img src='images/bt_remove.gif' title='Remove this version from release.' border='0'>"
Const LIMG_UNDO = "<img src='images/bt_undo.gif' title='Undo merge/remove.' border='0'>"
Const LIMG_SDK = "<img src='images/i_sdkpkg.png' width='18' height='18' border='0' title='Package is imported from an SDK and cannot be modified'>"
'------------ Variable Init -------------------
parRtagA = Request("rtagA")
parRtagB = Request("rtagB")
Set objRelCollectorA = CreateObject("Scripting.Dictionary")
Set objRelCollectorB = CreateObject("Scripting.Dictionary")
Set dDiffFilter = CreateObject("Scripting.Dictionary")
Set pendingAdditions = CreateObject("Scripting.Dictionary")
'----------------------------------------------
If Request("btn") = "Mail Me Report" Then
    email = true
    genReport = true
End If
If Request("btn") = "Show Me Report" Then
    genReport = true
End If
'--------------------------------------------------------------------------------------------------------------------------
Sub GetDiffFilterValues ( outDepFilter )
    Dim FilterVal, aFilterValues

    If Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) <> "" Then
        aFilterValues = Split( Replace( Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER), " ", ""), ",")

        For Each FilterVal In aFilterValues
            outDepFilter.Item (CStr( FilterVal )) = ""
        Next

    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Javascript()
    NewTextFile.WriteLine("<script language=""JavaScript"" type=""text/javascript"">")
    NewTextFile.WriteLine("function MM_findObj(n, d) { //v4.0")
    NewTextFile.WriteLine("  var p,i,x;")
    NewTextFile.WriteLine("  if(!d) d=document; ")
    NewTextFile.WriteLine("  if((p=n.indexOf(""?""))>0&&parent.frames.length) {")
    NewTextFile.WriteLine("     d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);")
    NewTextFile.WriteLine("  }")
    NewTextFile.WriteLine("  if(!(x=d[n])&&d.all) x=d.all[n]; ")
    NewTextFile.WriteLine("  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];")
    NewTextFile.WriteLine("  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);")
    NewTextFile.WriteLine("  if(!x && document.getElementById) x=document.getElementById(n); ")
    NewTextFile.WriteLine("  return x;")
    NewTextFile.WriteLine("}")

    NewTextFile.WriteLine("function toggleSPAN(x) {")
    NewTextFile.WriteLine("    var el = MM_findObj('spanPkgInfo' + x);")
    NewTextFile.WriteLine("    if (el.style.display != ""block"") {")
    NewTextFile.WriteLine("        el.style.display = ""block"";")
    NewTextFile.WriteLine("    } else {")
    NewTextFile.WriteLine("        el.style.display = ""none"";")
    NewTextFile.WriteLine("    }")
    NewTextFile.WriteLine("}")

    NewTextFile.WriteLine("function MM_getElementsByClassName(cn) {")
    NewTextFile.WriteLine("    var allT=document.getElementsByTagName('*'), allCN=[], i=0, a;")
    NewTextFile.WriteLine("    while(a=allT[i++]) {")
    NewTextFile.WriteLine("        a.className==cn ? allCN[allCN.length]=a : null;")
    NewTextFile.WriteLine("    }")
    NewTextFile.WriteLine("    return allCN")
    NewTextFile.WriteLine("}")

    NewTextFile.WriteLine("    function MM_toggleAll(cn, show){")
    NewTextFile.WriteLine("        var allEl = MM_getElementsByClassName(cn);")
    NewTextFile.WriteLine("        for (var ii=0; ii<allEl.length;ii++){")
    NewTextFile.WriteLine("            var el = allEl[ii];")
    NewTextFile.WriteLine("            if(show) {")
    NewTextFile.WriteLine("                el.style.display = ""block"";")
    NewTextFile.WriteLine("            } else {")
    NewTextFile.WriteLine("                el.style.display = ""none"";")
    NewTextFile.WriteLine("            }")
    NewTextFile.WriteLine("        }")
    NewTextFile.WriteLine("    }")

    NewTextFile.WriteLine("</script>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub GetFixedIssues(pv_id)
    '
    ' Clearcase issues
    '
    Set sqlstrA = OraDatabase.DbCreateDynaset("SELECT iss_db, iss_id, iss_state, notes FROM CQ_ISSUES WHERE pv_id="& pv_id &"  AND iss_state = "& enumISSUES_STATE_FIXED, cint(0))

    If sqlstrA.RecordCount <> 0 Then
        NewTextFile.WriteLine()
        NewTextFile.WriteLine("<blockquote><blockquote>Fixed ClearQuest Issues:</blockquote></blockquote>")
        NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")
        NewTextFile.WriteLine("<tr>")
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Id</td>")
        NewTextFile.WriteLine("<td width='55%' class='form_field'>Summary</td>")
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Type</td>")
        NewTextFile.WriteLine("<td width='15%' class='form_field'>Priority</td>")
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Status</td>")
        NewTextFile.WriteLine("</tr>")

        For counterA=1 to sqlstrA.RecordCount
            DEVIiss = "-1"

            If CInt(sqlstrA("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) Then
                DEVIiss = DEVIiss &","& sqlstrA("iss_id")
            End If

            SSsql = ReadFile( rootPath & "queries\cq_issues.sql" )
            SSsql = Replace( SSsql, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID)
            SSsql = Replace( SSsql, "/*DEVIiss*/", DEVIiss)
            retVal = Get_CQ_Issues ( SSsql, rsCQ )

            NewTextFile.WriteLine("<tr>")
            NewTextFile.WriteLine("<td nowrap class='form_item'>"&rsCQ("iss_num")&"</td>")

            NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( rsCQ("summary") ) )&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("issue_type")&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("priority")&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("Status")&"</td>")
            NewTextFile.WriteLine("</tr>")

            sqlstrA.MoveNext
        Next
        sqlstrA.Close()
        NewTextFile.WriteLine( "                        </table></blockquote></blockquote></blockquote>                 ")
    End If
    
    ' Must also handle Jira Issues
    On Error Resume Next

    Dim issueInfo, el, key
    Set issueInfo = CreateObject( "Scripting.Dictionary" )
    Call getJiraIssueDetails(pv_id, issueInfo, 1)
    If issueInfo.Count > 0 Then
        ' Table Header
        NewTextFile.WriteLine()
        NewTextFile.WriteLine("<blockquote><blockquote>Jira Issues:</blockquote></blockquote>")
        NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")
        NewTextFile.WriteLine("<tr>")
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Id</td>")
        NewTextFile.WriteLine("<td width='58%' class='form_field'>Summary</td>")
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Type</td>")
        NewTextFile.WriteLine("<td width='10%' class='form_field'>Priority</td>")
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Status</td>")
        NewTextFile.WriteLine("<td width='8%' class='form_field'>Resolution</td>")
        NewTextFile.WriteLine("</tr>")

        ' Table Body
        For Each key In issueInfo
            Set el = issueInfo.item(key)

            NewTextFile.WriteLine("<tr>")
            NewTextFile.WriteLine("<td nowrap class='form_item'>"&key&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( el.item("summary") ) )&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("issuetype")&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("priority")&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("status")&"</td>")
            NewTextFile.WriteLine("<td class='form_item'>"&el.item("resolution")&"</td>")
            NewTextFile.WriteLine("</tr>")
        Next
        NewTextFile.WriteLine( "                        </table></blockquote></blockquote></blockquote>                 ")
    Set issueInfo = nothing
    End If
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub LastPvIdA(a)

    Dim qryA
    Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0))

    'If a <> qryA("last_pv_id") Then
        a = qryA("last_pv_id")
    'Else
    '    errormsg = true
    'End If

    If pvCollectionA.Exists(CStr(a)) Then
        errormsg = true
        Exit Sub
    End If

    qryA.Close()
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub LastPvIdB(b)
    Dim qryB
    Set qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0))

    'If b <> qryB("last_pv_id") Then
        b = qryB("last_pv_id")
    'Else
    '    errormsg = true
    'End If

    If pvCollectionB.Exists(CStr(b)) Then
        errormsg = true
        Exit Sub
    End If

    qryB.Close()
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub pkg_Version(pv)
    Dim qry
    Set qry = OraDatabase.DbCreateDynaset("SELECT PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&pv, cint(0))
    pkgversion = qry("pkg_version")
    qry.Close()
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub LastPvIdAa(a)
    Dim qryA
    Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0))
    c = qryA("last_pv_id")
    qryA.Close()
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub LastPvIdBb(b)
    Dim qryB
    Set qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0))
    d = qryB("last_pv_id")
    qryB.Close()
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Comments(Pv_Id)
    Dim comments
    Set comments = OraDatabase.DbCreateDynaset("SELECT COMMENTS, PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&Pv_id, cint(0))

    scFlag = false
    If comments("comments") <> "Rippled Build." Then
        NewTextFile.WriteLine("<blockquote><blockquote><font color="&chr(34)&"blue"&chr(34)&">Version: "& comments("pkg_version")&"</font></blockquote></blockquote>")
        If comments("comments") <> "" Then
            NewTextFile.WriteLine("<blockquote><blockquote>Comments: </blockquote></blockquote>")
            NewTextFile.WriteLine("<blockquote><blockquote><blockquote>"& TextToHTML(comments("comments")) &"</blockquote></blockquote></blockquote>")
            source_change = true
            scFlag = true
        End If
    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Release(pvId)
    Dim release
    Set release = OraDatabase.DbCreateDynaset("SELECT INSERT_STAMP FROM RELEASE_CONTENT WHERE PV_ID="&pvId, cint(0))

    If release("insert_stamp") <> "" Then
        NewTextFile.Write(release("insert_stamp"))
    Else
        NewTextFile.Write("Version Not Used.")
    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Header()
    NewTextFile.WriteLine("<html>")
    NewTextFile.WriteLine("<head>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Footer()
    NewTextFile.WriteLine("</body>")
    NewTextFile.WriteLine("</html>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Styles()
  NewTextFile.WriteLine("<style type="&chr(34)&"text/css"&chr(34)&">")
  NewTextFile.WriteLine("body { font-family:Verdana,Arial,Helvetica,sans-serif; }")
  NewTextFile.WriteLine("table { border-collapse:collapse; }")
  NewTextFile.WriteLine("table.fixed_issues td { border-width:1; border-style:solid; border-color:black; padding:3 5 3 5; }")
  NewTextFile.WriteLine(".fixed_issues { border-width:1; border-style:solid; border-color:black; }")
  NewTextFile.WriteLine(".page_title { color:red; font-size:110%; text-align:center; }")
  NewTextFile.WriteLine(".highlight_text { color:blue; }")
  NewTextFile.WriteLine(".form_field { background-color:#EAE5D7; font:bold 70% Tahoma,sans-serif; }")
  NewTextFile.WriteLine(".form_item { background-color:#EAE5D7; color:red; font:bold 70% Tahoma,sans-serif; vertical-align:top; }")

  NewTextFile.WriteLine(".changesa { background-color:red; }")
  NewTextFile.WriteLine(".changesb { background-color:#FF9933; }")
  NewTextFile.WriteLine(".changesnone { color:#999999; }")

  NewTextFile.WriteLine(".texta { color:red; }")
  NewTextFile.WriteLine(".textb { color:#FF9933; }")
  NewTextFile.WriteLine(".textnone { color:#999999; }")

  NewTextFile.WriteLine("</style>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function GetIsDiffFilterInUseIcon()
    GetIsDiffFilterInUseIcon = LIMG_FILTER_OFF & LIMG_DROP_DOWN_ARROW

    If dDiffFilter.Count > 0 Then
        GetIsDiffFilterInUseIcon = LIMG_FILTER_ON & LIMG_DROP_DOWN_ARROW
    End If

End Function
'--------------------------------------------------------------------------------------------------------------------------
Function GetIsDiffFilterChecked( nFilterId )

    If dDiffFilter.Exists ( CStr(nFilterId)  ) Then
        GetIsDiffFilterChecked = "checked"
    End If

End Function
'---------------------------------------------------------------------------------------------------------------------------
Function  Get_CQ_Issues ( SSsql, OOrsCQ )

    On Error Resume Next
    Set OOrsCQ = OraDatabase.DbCreateDynaset( SSsql, cint(0))
    Get_CQ_Issues = Err.Number

End Function
'--------------------------------------------------------------------------------------------------------------------------
Public Function TextToHTML ( sString )
    Dim mString

    If (sString = "") OR IsNull(sString) Then Exit Function

    mString = Server.HTMLEncode( sString )
    mString = Replace(mString, VBNewLine, "<br>")

    TextToHTML = mString
End Function
'--------------------------------------------------------------------------------------------------------------------------

Sub GetFormDetails ( nSourceRtagId, ByRef outobjDetails )
    Dim rsQry, query

    ' Exit if nSourceRtagId is empty
    If nSourceRtagId = "" Then Exit Sub

    OraDatabase.Parameters.Add "SOURCE_RTAG_ID",     nSourceRtagId,        ORAPARM_INPUT, ORATYPE_NUMBER

    query = _
    " SELECT pr.PROJ_NAME ||' &gt; '|| rt.RTAG_NAME    AS LOCATION, "&_
    "          rt.OFFICIAL, pr.PROJ_ID, rt.RTAG_ID"&_
    "  FROM RELEASE_TAGS rt,"&_
    "            PROJECTS pr"&_
    " WHERE rt.PROJ_ID = pr.PROJ_ID"&_
    "    AND rt.RTAG_ID = :SOURCE_RTAG_ID"

    Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT )

    OraDatabase.Parameters.Remove "SOURCE_RTAG_ID"

    If rsQry.RecordCount > 0 Then
        outobjDetails.Item ("location") = rsQry("location")
        outobjDetails.Item ("official") = rsQry("official")
        outobjDetails.Item ("proj_id") = rsQry("proj_id")
        outobjDetails.Item ("rtag_id") = rsQry("rtag_id")
    Else
        Err.Raise 8, "Sub GetFormDetails in "& ScriptName, "Empty record set returned. nSourceRtagId="& nSourceRtagId
    End If

    rsQry.Close
    Set rsQry = Nothing
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub GetDiffStateIcon( nDiffState, outIcon )

    Select Case nDiffState
        Case "U"
            outIcon  = LIMG_UPDATED
        Case "UW"
            outIcon  = LIMG_UPDATED
        Case "A"
            outIcon = LIMG_ADDED
        Case "R"
            outIcon = LIMG_REMOVED
        Case "UR"
            outIcon = LIMG_RIPPLED
        Case Else
            outIcon = ""
    End Select

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function Get_Record_Count ( SSsql )
    Dim rsTemp
    Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT COUNT(*) as record_count FROM "& SSsql , cint(0))

    If (NOT rsTemp.BOF) AND (NOT rsTemp.EOF) Then
        Get_Record_Count = rsTemp("record_count")
    Else
        Get_Record_Count = 0
    End If
    rsTemp.Close
    Set rsTemp = nothing
End Function
'--------------------------------------------------------------------------------------------------------------------------
' We need a way of discriminating between versions in the destination release that are pending, and those that are officially
' in the release. This function allows us to do that on the fly within the VBSCRIPT HTML generating code, indicating specifically
' if the given PV_ID reflects a pending additive merge.
Function Is_Pending_Add(NNrtag_id, NNpv_id)
    If IsNull(NNrtag_id) OR IsNull(NNpv_id) Then
        Is_Pending_Add = 0
    Else
        Is_Pending_Add = Get_Record_Count( "PLANNED pl WHERE pl.rtag_id = " & NNrtag_id & " AND pl.pv_id = " & NNpv_id & " AND pl.operation = 'A'" )
    End If
End Function
'--------------------------------------------------------------------------------------------------------------------------
' We need a way of discriminating between versions in the destination release that are pending, and those that are officially
' in the release. This function allows us to do that on the fly within the VBSCRIPT HTML generating code, indicating specifically
' if the given PV_ID reflects a pending subtractive merge.
Function Is_Pending_Sub(NNrtag_id, NNpv_id)
    If IsNull(NNrtag_id) OR IsNull(NNpv_id) Then
        Is_Pending_Sub = 0
    Else
        Is_Pending_Sub = Get_Record_Count( "PLANNED pl WHERE pl.rtag_id = " & NNrtag_id & " AND pl.pv_id = " & NNpv_id & " AND pl.operation = 'S'" )
    End If
End Function

'--------------------------------------------------------------------------------------------------------------------------
Sub MergePackages ()
    Dim aFullList, aAddPkgList, aRemovePkgList, dAddPkgList, dRemovePkgList, PvId
    Dim OraParameter
    Dim rc

    Set dAddPkgList = CreateObject("Scripting.Dictionary")
    Set dRemovePkgList = CreateObject("Scripting.Dictionary")

    '--- Get Add Packages ---
    ' Get full list of "addpkg" parameter
    aFullList = Split ( Replace( Request("addpkg"), " ", "" ), "," )

    ' Clean empty parameters
    For Each PvId In aFullList
        If PvId <> "" Then
            dAddPkgList.Add CStr( PvId ), Empty
        End If
    Next

    aFullList = NULL
    aAddPkgList = dAddPkgList.Keys

    '--- Get Remove Packages ---
    ' Get full list of "removepkg" parameter
    aFullList = Split ( Replace( Request("removepkg"), " ", "" ), "," )

    ' Clean empty parameters
    For Each PvId In aFullList
        If PvId <> "" Then
            dRemovePkgList.Add CStr( PvId ), Empty
        End If
    Next

    aFullList = NULL
    aRemovePkgList = dRemovePkgList.Keys

    '-- Add package List to release --
    OraDatabase.Parameters.Add "PV_ID",     NULL, ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "VIEW_ID",  NULL, ORAPARM_BOTH, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "RTAG_A",    Request("rtagA"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "RTAG_B",    Request("rtagB"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "PROJB",     objRelCollectorB.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "COMMENTS", "Merging from "& objRelCollectorA.Item("location") &" to "& objRelCollectorB.Item("location"), ORAPARM_INPUT, ORATYPE_VARCHAR2
    OraDatabase.Parameters.Add "USER_ID",  objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "OPERATION",NULL, ORAPARM_INPUT, ORATYPE_CHAR

    Set OraParameter = OraDatabase.Parameters


    On Error Resume Next


    ' Begin Database entry
    objEH.TryORA ( OraSession )

    '-- Add Packages --
    OraParameter("OPERATION").Value = "A"
    For Each PvId In aAddPkgList
        OraParameter("PV_ID").Value = PvId
        ' DEVI-45275, Merge into Planned (pending) table instead of release_content table.
        If Err.Number = 0 Then
            OraDatabase.ExecuteSQL _
            "BEGIN  "&_
            "  :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_A ); "&_
            "  PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION );  "&_
            "END;"
        End If
    Next

    '-- Remove Packages --
    If Err.Number = 0 Then
        OraParameter("OPERATION").Value = "S"
        For Each PvId In aRemovePkgList
            OraParameter("PV_ID").Value = PvId

            If Err.Number = 0 Then
                ' Does this PV_ID exist in the destination release's planned table?
                rc = Get_Record_Count ("PLANNED pl WHERE pl.pv_id = " & PvId & " AND pl.rtag_id = " & Request("rtagB") )
                If  rc > 0 Then
                    ' Given that merging now merges into pending, the merge page may be used to remove items that have
                    ' previously been merged but have not yet been committed to the destination release. For these,
                    ' we cannot call PK_RELEASE.GET_PACKAGE_VIEW(). We have to call PK_PLANNED.GET_PACKAGE_VIEW() instead.
                    OraDatabase.ExecuteSQL _
                    "BEGIN  "&_
                    "  :VIEW_ID := PK_PLANNED.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_B ); "&_
                    "  PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION );  "&_
                    "END;"
                Else
                    ' DEVI-45275, Merge into Planned (pending) table instead of release_content table.
                    OraDatabase.ExecuteSQL _
                    "BEGIN  "&_
                    "  :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_B ); "&_
                    "  PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION );  "&_
                    "END;"
                End If
            End If
        Next

        '-- Log Project Merge Action
        If Err.Number = 0 Then
            OraDatabase.ExecuteSQL _
            "BEGIN  LOG_PROJECT_ACTION ( :PROJB, 'merge_release', :USER_ID, :COMMENTS, :RTAG_B );  END;"
        End If

    End If

    objEH.CatchORA ( OraSession )     ' sets up LastOraFailed as appropriate

    ' NOTE, The Touch_Release stored procedure does a commit itself, so we should not do it unless all the ExecuteSQL's we
    ' have just performed, were successful
    If objEH.LastOraFailed = FALSE Then
        '-- Force package state recalculate
        objEH.TryORA ( OraSession )
        OraDatabase.ExecuteSQL _
            "BEGIN  "&_
            "  TOUCH_RELEASE ( :RTAG_B );  "&_
            "END;"
        objEH.CatchORA ( OraSession )
    End If

    Set OraParameter = Nothing
    OraDatabase.Parameters.Remove "PV_ID"
    OraDatabase.Parameters.Remove "VIEW_ID"
    OraDatabase.Parameters.Remove "RTAG_A"
    OraDatabase.Parameters.Remove "RTAG_B"
    OraDatabase.Parameters.Remove "USER_ID"
    OraDatabase.Parameters.Remove "PROJB"
    OraDatabase.Parameters.Remove "COMMENTS"
    OraDatabase.Parameters.Remove "OPERATION"
    'Response.write "<br>"& sAddPkgList &"-"& dAddPkgList.Count &"-"& UBound( aFullList )
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function AddTrailingZeros(byval n, byval count)
    if len(n) >= count then
        AddTrailingZeros = n
        exit function
    end if

    dim c, s, i
    c = count - len(n)

    for i = 1 to c
        s = s & "0"
    next
    s = cstr(n) & s

    AddTrailingZeros = s
End function
'--------------------------------------------------------------------------------------------------------------------------
'------------ RUN BEFORE PAGE RENDER ----------
If Request("btn") = "Exit" Then
    Call OpenInWindow ( "index.asp" )
End If

' Get release details
Call GetFormDetails ( parRtagA, objRelCollectorA )
Call GetFormDetails ( parRtagB, objRelCollectorB )
setActiveProject (objRelCollectorB.Item("proj_id"))
isMergable = releaseIsMergable(objRelCollectorB.Item("official"))

If (Request("btn") = "Merge") AND isMergable Then
    Call MergePackages ()
End If

If Request("btn") = "Swap Compare" Then
    Call OpenInWindow ( ScriptName &"?rtagA="& parRtagB &"&rtagB="& parRtagA )
End If

If Request("btn") = "Hide" Then
    ' Store filter in cookie
    Response.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) = Request("difilter")
End If

Call GetDiffFilterValues ( dDiffFilter )
'----------------------------------------------
%>
<html>
<head>
<title>Release Manager</title>
<link rel="shortcut icon" href="<%=FavIcon%>"/>
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
<link rel="stylesheet" href="images/navigation.css" type="text/css">
<script language="JavaScript" src="images/common.js"></script>
<script language="JavaScript" src="scripts/remote_scripting.js"></script>

<!-- TIPS -->
<script language="JavaScript" src="images/tipster.js"></script>
<script language="JavaScript" src="images/_help_tips.js"></script>
<script language="JavaScript" type="text/javascript">
<!--

function RequestReleaseCombo( paramString, rowId )
{
    var requestURL = 'RequestReleaseCombo.asp';

    // Set ajax divname
    ajaxdivname = rowId;

    //Append the name to search for to the requestURL
    var url = requestURL + paramString;

    //Progress
    //alert(MM_findObj( rowId ));

    //MM_findObj( rowId ).options[0] = new Option('Loading...','');
    //MM_findObj( rowId ).selectedIndex = 0;
    rowId.options[0] = new Option('Loading...','');
    rowId.selectedIndex = 0;


    //Create the xmlHttp object to use in the request
    //stateChangeHandler will fire when the state has changed, i.e. data is received back
    // This is non-blocking (asynchronous)
    xmlHttp = GetXmlHttpObject(stateComboChangeHandler);

    //Send the xmlHttp get to the specified url
    xmlHttp_Get(xmlHttp, url);
}

function SetDisplay(name, mode)
{
        var o;
        if (o = MM_findObj(name))
        {
                o.style.display = mode;
        }
}

function MergePackage ( pkga, pkgb, rowId )
{
    // Set merge hidden field with new value
    MM_findObj( 'ADDPKG_' + rowId ).value = pkga;

    var divA = MM_findObj( 'PVA' + rowId );
    var divB = MM_findObj( 'PVB' + rowId );

    // Set text equal
    divB.innerHTML = divA.innerHTML;

    // Set highlight to blank
    divA.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';
    divB.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';

     // Set Change state icon to blank
    SetDisplay( 'IMGSTATE' + rowId, 'none');

    // Remove Merge Button
    SetDisplay( 'IMGMERGE' + rowId, 'none');
    SetDisplay( 'IMGREMOVE' + rowId, 'none');

    // Show undo button
    SetDisplay( 'IMGUNDO' + rowId, 'block');
}


function RemovePackage ( pkga, pkgb, rowId )
{
    // Set remove hidden field with new value
    MM_findObj( 'REMOVEPKG_' + rowId ).value = pkgb;

    var divA = MM_findObj( 'PVA' + rowId );
    var divB = MM_findObj( 'PVB' + rowId );

    // Set text equal
    divB.style.textDecoration = 'line-through';

    // Set highlight to blank
    if (MM_findObj( 'CHANGETYPE_' + rowId ).value != "A")
    {
        divA.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';
    }
    divB.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';

     // Set Change state icon to blank
    SetDisplay( 'IMGSTATE' + rowId , 'none');

    // Remove Merge Button
    SetDisplay( 'IMGMERGE' + rowId , 'none');
    SetDisplay( 'IMGREMOVE' + rowId , 'none');

    // Show undo button
    SetDisplay( 'IMGUNDO' + rowId ,'block');
}



function UndoPackage ( rowId )
{
    // Set merge/remove hidden field with new value
    MM_findObj( 'ADDPKG_' + rowId ).value = '';
    MM_findObj( 'REMOVEPKG_' + rowId ).value = '';

    var divA = MM_findObj( 'PVA' + rowId );
    var divB = MM_findObj( 'PVB' + rowId );

    // Set text equal
    divB.innerHTML = MM_findObj( 'UNDOPKG_' + rowId ).value;
    divB.style.textDecoration = 'none';


    // Set highlight to blank
    divA.style.backgroundColor = MM_findObj( 'UNDOCOLORA_' + rowId ).value;
    divB.style.backgroundColor = MM_findObj( 'UNDOCOLORB_' + rowId ).value;

     // Set Change state icon to blank
    SetDisplay( 'IMGSTATE' + rowId, 'block');

    // Remove Merge Button
    var cht = MM_findObj( 'CHANGETYPE_' + rowId );

    if (cht.value == "R")
    {
        SetDisplay( 'IMGMERGE' + rowId, 'block');
    }
    else if ( (cht.value == "A") || (cht.value == "") )
    {
        SetDisplay( 'IMGREMOVE' + rowId, 'block');
    }
    else
    {
        SetDisplay( 'IMGMERGE' + rowId, 'block');
        SetDisplay( 'IMGREMOVE' + rowId,'block');
    }

    // Show undo button
    SetDisplay( 'IMGUNDO' + rowId, 'none');
}


function MergeAll()
{
    var elem

    if (document.all)
    {
        // Run this for IE
        elem = document.all;
    } else {
        // Run this for other browsers
        elem = document.getElementsByTagName('div');
    }

    for (i in elem)
    {
        if (elem[i].id)
        {
            if (elem[i].id.indexOf('SHORT_') == 0) elem[i].style.display = 'none';
            if (elem[i].id.indexOf('LONG_') == 0) elem[i].style.display = 'block';
        }
    }
}

//-->
</script>

</head>
<!-- TIPS LAYERS -------------------------------------->
<div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10">&nbsp;</div>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">
<form name="FormName" method="post" action="<%=ScriptName%>">
    <!-- HEADER -->
    <!--#include file="_header.asp"-->
    <!-- BODY ---->
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td width="20%">
            <td width="60%">
            <td width="20%">
        </tr>
        <tr>
            <td background="images/bg_home_orange.gif" valign="top">
                <!-- SELECT RELEASE A ---------------------------------------------->
                <br>
                <table width="100%"  border="0" cellspacing="10" cellpadding="0">
                    <tr>
                        <td align="left" class="body_col"><img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13">&nbsp;Select Release A<hr size="1px" color="Olive" noshade></td>
                    </tr>
                    <tr>
                        <td align="left">
                            <select name="projA" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagA );">
                                <option value="">-- Select Project --</option>
                                <%
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorA.Item("proj_id"),    ORAPARM_INPUT, ORATYPE_NUMBER

                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))

                                OraDatabase.Parameters.Remove "PROJ_ID"

                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                                    <option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option>
                                    <%rsQry.MoveNext
                                WEnd

                                rsQry.Close
                                Set rsQry = Nothing
                                %>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td align="left">
                            <select name="rtagA" id="rtagA" class="form_item">
                                <%
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorA.Item("proj_id"),    ORAPARM_INPUT,  ORATYPE_NUMBER
                                OraDatabase.Parameters.Add "RTAG_ID",     objRelCollectorA.Item("rtag_id"),    ORAPARM_INPUT, ORATYPE_NUMBER

                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))

                                OraDatabase.Parameters.Remove "PROJ_ID"
                                OraDatabase.Parameters.Remove "RTAG_ID"

                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                                        <option value="<%=rsQry("rtag_id")%>" <%=rsQry("selected")%>><%=rsQry("rtag_name")%></option>
                                    <%rsQry.MoveNext
                                WEnd

                                rsQry.Close
                                Set rsQry = Nothing
                                %>
                            </select>
                        </td>
                    </tr>
                    <%If (parRtagA <> "") Then%>
                        <tr>
                            <td align="left"><a href="dependencies.asp?rtag_id=<%=parRtagA%>" class="body_txt_drk">Go To Release A &raquo;</a></td>
                        </tr>
                    <%End If%>
                </table>

                <!-- SELECT RELEASE A END ---------------------------------------------->
            </td>

            <td rowspan="2" valign="top" background="images/bg_lght_gray.gif" align="center">
                <!-- DIFF -------------------------------------------------------->
                <br>
                <table width="100%" border="0" cellspacing="10" cellpadding="0">
                    <tr>
                        <td>
                            <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                    <td width="1%"></td>
                                    <td width="100%" align="left" class="form_ttl">DIFF / MERGE RELEASE
                                        <%If genReport Then%>
                                        &nbsp;[Generating Report]
                                        <%End If%>
                                        </td>
                                    <td width="1%"></td>
                                </tr>
                                <tr>
                                    <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
                                    <td background="images/lbox_bg_blue.gif" align="left" class="wform_ttl">&nbsp;</td>
                                    <td align="right" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
                                </tr>
                                <tr>
                                    <td width="1%" bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
                                    <td bgcolor="#FFFFFF" valign="top" class="form_item">
                                        <table width="100%"  border="0" cellspacing="0" cellpadding="5">
                                            <tr>
                                                <td width="100%" bgcolor="#DAD7C8">
                                                    <input type="submit" name="btn" value="Compare" class="form_btn_comp" style="margin-right:5px;">
                                                    <input type="submit" name="btn" value="Swap Compare" class="form_btn_comp">
                                                    <span class="body_txt">
                                                        <input name="btn" type="submit" class="form_btn" value="Mail Me Report">
                                                        <% '<input name="btn" type="submit" class="form_btn" value="Show Me Report"> %>
                                                    </span>
                                                </td>
                                                <td width="1" align="right" bgcolor="#DAD7C8" nowrap>
                                                    <table width="100%"  border="0" cellspacing="0" cellpadding="0">
                                                        <tr>
                                                            <%
                                                                Dim mergeMessage, mergeDisabled
                                                                mergeDisabled = " disabled"
                                                                If (parRtagA = "") Then
                                                                    mergeMessage = "Select Release A"
                                                                ElseIf (parRtagB = "") Then  
                                                                    mergeMessage = "Select Release B"
                                                                ElseIf NOT isMergable Then  
                                                                    mergeMessage = "Release B cannot be modified"
                                                                Else
                                                                    mergeDisabled = ""
                                                                End If
                                                            %>
                                                            <td class="err_alert nowrap" style="padding-right:1em">
                                                                <%=mergeMessage%>
                                                            </td>
                                                            <td>
                                                                <input type="submit" name="btn" value="Merge" class="form_btn_comp" style="margin-right:10px;" <%=mergeDisabled%>>
                                                            </td>
                                                            <td>
                                                                <input type="submit" name="btn" value="Exit" class="form_btn_comp">
                                                            </td>
                                                        </tr>
                                                    </table>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <%If (parRtagA <> "") AND (parRtagB <> "")Then%>
                                                        <!-- DIFF FILTER +++++++++++++++++++++++++++++++++++++++++++ -->
                                                        <fieldset style="width:150px;">
                                                            <legend><a href="javascript:;" class="body_scol" onClick="ToggleDisplay('divDiffFilter');" ><%=GetIsDiffFilterInUseIcon() %>&nbsp;Filter&nbsp;Results...</a></legend>
                                                            <div name="divDiffFilter" id="divDiffFilter" class="body_txt" style="display:none;">
                                                                <br>
                                                                <table width="100%"  border="0" cellspacing="1" cellpadding="3">
                                                                    <tr>
                                                                        <td width="1" background="images/bg_action_norm.gif"><input name="difilter" type="checkbox" value="<%=enumDB_NUM_DIFF_UPDATED%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED)%>></td>
                                                                        <td width="50" nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_UPDATED%>Updated</td>
                                                                    </tr>
                                                                    <tr>
                                                                        <td background="images/bg_action_norm.gif"><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_NEW%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW)%>></td>
                                                                        <td nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_ADDED%>Added</td>
                                                                    </tr>
                                                                    <tr>
                                                                        <td background="images/bg_action_norm.gif"><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_REMOVED%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED)%>></td>
                                                                        <td nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_REMOVED%>Removed</td>
                                                                    </tr>
                                                                    <tr>
                                                                        <td background="images/bg_action_norm.gif"><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_RIPPLE%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE)%>></td>
                                                                        <td nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_RIPPLED%>Rippled</td>
                                                                    </tr>
                                                                    <tr>
                                                                        <td background="images/bg_action_norm.gif"><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_NO_CHANGE%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE)%>></td>
                                                                        <td nowrap background="images/bg_action_norm.gif" class="form_field">Unchanged</td>
                                                                    </tr>
                                                                    <tr>
                                                                        <td background="images/bg_action_norm.gif">&nbsp;</td>
                                                                        <td background="images/bg_action_norm.gif"><input name="btn" type="submit" class="form_btn" value="Hide"></td>
                                                                    </tr>
                                                                </table>
                                                            </div>
                                                        </fieldset>
                                                        <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
                                                    <%End If%>
                                                </td>
                                                <td></td>
                                            </tr>
                                        </table>

                                        <%
                                        ' Successfull Merge
                                        If (Request("btn") = "Merge") Then
                                            Call Messenger ( "Merge has completed successfully.", 3, "100%" )
                                        End If

                                        Set FSO=Server.CreateObject("Scripting.FileSystemObject")
                                        Set NewTextFile=FSO.CreateTextFile(Server.MapPath("docs\compareReleases_"&objAccessControl.UserName&".html"), true)

                                        Call Header()

                                        If (parRtagA <> "") AND (parRtagB <> "")Then%>
                                            <table width="100%"  border="0" cellspacing="1" cellpadding="0">
                                                <tr>
                                                    <td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorA.Item("official")) & objRelCollectorA.Item("location")%> </td>
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="20"></td>
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
                                                    <td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorB.Item("official")) & objRelCollectorB.Item("location")%></td>
                                                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
                                                </tr>
                                                <%
                                                OraDatabase.Parameters.Add "RTAG_A",     parRtagA,    ORAPARM_INPUT, ORATYPE_NUMBER
                                                OraDatabase.Parameters.Add "RTAG_B",     parRtagB,    ORAPARM_INPUT, ORATYPE_NUMBER
                                                OraDatabase.Parameters.Add "NO_CHANGE", GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE), ORAPARM_INPUT, ORATYPE_VARCHAR2
                                                OraDatabase.Parameters.Add "ADDED",      GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW),         ORAPARM_INPUT, ORATYPE_VARCHAR2
                                                OraDatabase.Parameters.Add "UPDATED",    GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED),    ORAPARM_INPUT, ORATYPE_VARCHAR2
                                                OraDatabase.Parameters.Add "REMOVED",    GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED),    ORAPARM_INPUT, ORATYPE_VARCHAR2

                                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleaseDiff.sql"), cint(0))

                                                OraDatabase.Parameters.Remove "RTAG_A"
                                                OraDatabase.Parameters.Remove "RTAG_B"
                                                OraDatabase.Parameters.Remove "NO_CHANGE"
                                                OraDatabase.Parameters.Remove "ADDED"
                                                OraDatabase.Parameters.Remove "UPDATED"
                                                OraDatabase.Parameters.Remove "REMOVED"

                                                Set rsQryA = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, PRJ.PROJ_NAME FROM RELEASE_TAGS RT, PROJECTS PRJ WHERE RTAG_ID="& parRtagA &" AND RT.PROJ_ID=PRJ.PROJ_ID", cint(0))
                                                Set rsQryB = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, PRJ.PROJ_NAME FROM RELEASE_TAGS RT, PROJECTS PRJ WHERE RTAG_ID="& parRtagB &" AND RT.PROJ_ID=PRJ.PROJ_ID", cint(0))

                                                Call Javascript()
                                                Call Styles()

                                                NewTextFile.WriteLine("<title>Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"</title>")
                                                NewTextFile.WriteLine("<div class=""page_title"">Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"</div><br>")
                                                NewTextFile.WriteLine("<b>Key:</b><br><blockquote>")
                                                NewTextFile.WriteLine("<span class=changesa><b>SOURCE CODE CHANGES</b></span><span class=texta> Indicates Changes to a Package in "& rsQryA("rtag_name") &".</span><br>")
                                                NewTextFile.WriteLine("<span class=changesb><b>SOURCE CODE CHANGES</b></span><span class=textb> Indicates Changes to a Package in "& rsQryB("rtag_name") &".</span><br>")
                                                NewTextFile.WriteLine("<span class=changesnone><b>Grey Text</b></span><span class=textnone> No Source Code Changes to a Package in either Release.</span>")
                                                NewTextFile.WriteLine("</blockquote>")

                                                NewTextFile.WriteLine("<b>Toggle Sections:</b><blockquote>")
                                                NewTextFile.WriteLine("<a href=""javascript:;"" onClick=""MM_toggleAll('divPkgInfo','1');"">Expand All</a>")
                                                NewTextFile.WriteLine("<a href=""javascript:;"" onClick=""MM_toggleAll('divPkgInfo','');"">Collapse All</a>")
                                                NewTextFile.WriteLine("</blockquote>")

                                                Dim currView_id
                                                currView_id = -1

                                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))
                                                    errormsg = false
                                                    rowId = rsQry("pv_id_a") &"_"& rsQry("pv_id_b")

                                                    btnMerge = LIMG_MERGE
                                                    btnRemove = LIMG_REMOVE
                                                    colorA = LCOLOR_NOT_CHANGED
                                                    colorB = LCOLOR_NOT_CHANGED

                                                    changeType = rsQry("change_type")
                                                    isaSdk = rsQry("PKG_SDK_B")

                                                    Select Case changeType
                                                        Case "U"
                                                            colorA = LCOLOR_CHANGED
                                                            colorB = LCOLOR_CHANGED
                                                        Case "UW"
                                                            colorA = LCOLOR_CHANGED
                                                            colorB = LCOLOR_CHANGED
                                                            btnMerge = LIMG_MERGE_WARN
                                                        Case "UR"
                                                            colorA = LCOLOR_RIPPLED
                                                            colorB = LCOLOR_RIPPLED
                                                        Case "A"
                                                            colorA = LCOLOR_BLANK
                                                        Case "R"
                                                            colorB = LCOLOR_BLANK
                                                    End Select

                                                    Call GetDiffStateIcon ( changeType, ChangeTypeIcon )

                                                    If changeType = "U" OR changeType = "UW" OR changeType = "UR" Then
                                                        Dim MajorA, MajorB, MinorA, MinorB, PatchA, PatchB, BuildA, BuildB, pos, pkgVersionA, pkgVersionB, majMinA, majMinB
                                                        MajorA = NULL
                                                        MajorB = NULL
                                                        MinorA = NULL
                                                        MinorB = NULL

                                                        pkgVersionA = rsQry("pkg_version_a")
                                                        pkgVersionB = rsQry("pkg_version_b")

                                                        PatchA = rsQry("patch_number_a")
                                                        PatchB = rsQry("patch_number_b")
                                                        BuildA = rsQry("build_number_a")
                                                        BuildB = rsQry("build_number_b")


                                                        ' Find the first occurence of the dot in package version A
                                                        pos = InStr(pkgVersionA, ".")
                                                        If pos <> 0 Then
                                                            ' Extract the Major Version for A
                                                            MajorA = Mid(pkgVersionA, 1, pos - 1)
                                                            ' Delete the Major Version Value from the string to get the minor and patch version
                                                            pkgVersionA = Mid(pkgVersionA, pos + 1, Len(pkgVersionA))
                                                            ' Find the second occurence of the dot in package version A
                                                            pos = InStr(pkgVersionA, ".")
                                                            ' Extract the Minor Version for A
                                                            If pos <> 0 Then
                                                                MinorA = Mid(pkgVersionA, 1, pos - 1)
                                                            End If
                                                        End If

                                                        ' Find the first occurence of the dot in package version B
                                                        pos = InStr(pkgVersionB, ".")
                                                        If pos <> 0 Then
                                                            ' Extract the Major Version for B
                                                            MajorB = Mid(pkgVersionB, 1, pos - 1)
                                                            ' Delete the Major Version Value from the string to get the minor and patch version
                                                            pkgVersionB = Mid(pkgVersionB, pos + 1, Len(pkgVersionB))
                                                            ' Find the second occurence of the dot in package version B
                                                            pos = InStr(pkgVersionB, ".")
                                                            ' Extract the Minor Version for B
                                                            If pos <> 0 Then
                                                                MinorB = Mid(pkgVersionB, 1, pos - 1)
                                                            End If
                                                        End If

                                                        If MajorA = MajorB Then
                                                            If MinorA = MinorB Then
                                                                If IsNumeric(PatchA) AND IsNumeric(PatchB) Then
                                                                    If CInt(PatchB) > CInt(PatchA) Then
                                                                        btnMerge = LIMG_MERGE_WARN
                                                                    Else
                                                                        btnMerge = LIMG_MERGE
                                                                    End If
                                                                End If
                                                            Else
                                                                If IsNumeric(MinorA) AND IsNumeric(MinorB) Then
                                                                    If CInt(MinorB) > CInt(MinorA) Then
                                                                        btnMerge = LIMG_MERGE_WARN
                                                                    Else
                                                                        btnMerge = LIMG_MERGE
                                                                    End If
                                                                End If
                                                            End If
                                                        Else
                                                            If IsNumeric(MajorA) AND IsNumeric(MajorB) Then
                                                                If     CInt(MajorB) > CInt(MajorA) Then
                                                                    btnMerge = LIMG_MERGE_WARN
                                                                Else
                                                                    btnMerge = LIMG_MERGE
                                                                End If
                                                            End If
                                                        End If
                                                    End If

                                                    ' -------- FILTERS RIPPLE BUILDS WHEN CHECKED -----------------
                                                    If NOT (GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE) = "checked" AND changeType = "UR") THEN

                                                        ' -------- GROUP BY BASE VIEW  -----------------
                                                        If CDbl(currView_id) <> CDbl(rsQry("view_id")) Then%>
                                                            <tr>
                                                                <td valign="top" nowrap class="form_ttl"><b><%=rsQry("view_name")%></b></td>
                                                                <td class="form_ttl">&nbsp;</td>
                                                                <td class="form_ttl">&nbsp;</td>
                                                                <td class="form_ttl">&nbsp;</td>
                                                                <td class="form_ttl">&nbsp;</td>
                                                                <td class="form_ttl">&nbsp;</td>
                                                            </tr>
                                                            <%
                                                            currView_id = CDbl(rsQry("view_id"))
                                                        End If
                                                        ' -------- END GROUP ------------------------
                                                        %>
                                                        <%
                                                        'Determine if we are dealing with a PV_ID that we have already encountered and displayed as a pending addition
                                                        'If we are, we do not need to display anything more about it, so skip the row.
                                                        ' NOTE. the result set is sorted by change type (see releasediff.sql) such that if there are multiple entries
                                                        '         for the same PV_ID, they are sorted in the following order: unchanged, additions, removals, updates.
                                                        '         This is important to the row skip filtering carried out below.
                                                        Dim skipRow
                                                        If rsQry("pv_id_a") Then
                                                            skipRow = pendingAdditions.Exists(CStr(rsQry("pv_id_a")))
                                                        Else
                                                            skipRow = FALSE
                                                        End If
                                                        %>
                                                        <%If NOT skipRow Then%>
                                                            <tr>
                                                                <td class="body_row" nowrap>
                                                                    <DIV id="PVA<%=rowId%>" style="background:<%=colorA%>; padding:5px;">
                                                                        <%=rsQry("pkg_name_a") &" "& rsQry("pkg_version_a")%>
                                                                    </DIV>
                                                                    <input type="hidden" id="UNDOCOLORA_<%=rowId%>" value="<%=colorA%>">
                                                                </td>

                                                                <%
                                                                Dim pkgADisplayControl
                                                                pkgADisplayControl = isMergable
                                                                If IsNull( changeType ) OR (changeType = "A")  OR (changeType = "0") Then pkgADisplayControl = FALSE
                                                                If isaSdk Then pkgADisplayControl = FALSE
                                                                %>
                                                                <td bgcolor="#F5F5F5">
                                                                    <%If pkgADisplayControl Then%>
                                                                        <DIV id="IMGMERGE<%=rowId%>"><a href="javascript:;" onClick="MergePackage( '<%=rsQry("pv_id_a")%>', '<%=rsQry("pv_id_b")%>', '<%=rowId%>' );"><%=btnMerge%></a></DIV>
                                                                    <%End If%>
                                                                </td>

                                                                <td bgcolor="#E4E9EC">
                                                                    <DIV id="IMGSTATE<%=rowId%>" ><%=ChangeTypeIcon%></DIV>
                                                                    <input type="hidden" id="CHANGETYPE_<%=rowId%>" value="<%=changeType%>">
                                                                </td>

                                                                <%
                                                                Dim pkgBDisplayControl
                                                                pkgBDisplayControl = isMergable
                                                                If changeType = "R" Then pkgBDisplayControl = FALSE
                                                                If isaSdk Then pkgBDisplayControl = FALSE
                                                                %>
                                                                <td bgcolor="#F5F5F5">
                                                                    <%If pkgBDisplayControl Then%>
                                                                        <DIV id="IMGREMOVE<%=rowId%>" ><a href="javascript:;" onClick="RemovePackage( '<%=rsQry("pv_id_a")%>', '<%=rsQry("pv_id_b")%>', '<%=rowId%>' );"><%=btnRemove%></a></DIV>
                                                                    <%ElseIf isaSdk Then %> 
                                                                        <DIV ><%=LIMG_SDK%></DIV>
                                                                    <%End If%>
                                                                </td>

                                                                <td class="body_row" nowrap>
                                                                    <DIV id="PVB<%=rowId%>" style="background:<%=colorB%>; padding:5px;">
                                                                        <%If IsNull(rsQry("pv_id_b")) Then %>
                                                                            <%If Is_Pending_Sub(Request("rtagB"), rsQry("pv_id_a")) Then%>
                                                                                (removal pending<%=Quick_Help("RemovalPending")%>)
                                                                            <%End If %>
                                                                        <%Else%>
                                                                            <%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>
                                                                            <%If Is_Pending_Add(Request("rtagB"), rsQry("pv_id_b")) Then%>
                                                                                (addition pending<%=Quick_Help("AdditionPending")%>)
                                                                                <% 'Add this pending addition to the dictionary so that we can filter out REMOVED entries
                                                                                    'with identical PV_ID's that we might encounter further on in the result set
                                                                                If NOT pendingAdditions.Exists(rsQry("pv_id_b")) Then
                                                                                    pendingAdditions.Add CStr(rsQry("pv_id_b")), CStr(rsQry("pkg_version_b"))
                                                                                End If%>
                                                                            <%ElseIf Is_Pending_Sub(Request("rtagB"), rsQry("pv_id_b")) Then%>
                                                                                (removal pending<%=Quick_Help("RemovalPending")%>)
                                                                            <%End If %>
                                                                        <%End If %>
                                                                    </DIV>
                                                                    <input type="hidden" id="UNDOCOLORB_<%=rowId%>" value="<%=colorB%>">
                                                                    <input type="hidden" name="addpkg" id="ADDPKG_<%=rowId%>" value="">
                                                                    <input type="hidden" name="removepkg" id="REMOVEPKG_<%=rowId%>" value="">
                                                                    <input type="hidden" id="UNDOPKG_<%=rowId%>" value="<%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>">
                                                                </td>

                                                                <td bgcolor="#F5F5F5">
                                                                    <DIV id="IMGUNDO<%=rowId%>" style="display:none;" >
                                                                        <a href="javascript:;" onClick="UndoPackage( '<%=rowId%>' );"><%=LIMG_UNDO%></a>
                                                                    </DIV>
                                                                </td>
                                                            </tr>
                                                        <%End If %>

                                                        <%
                                                        If genReport AND NOT skipRow  Then
                                                            If rsQry("pv_id_a") Then
                                                                Set rsQryCommentsA = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_a"), cint(0))
                                                            End If

                                                            If rsQry("pv_id_b") Then
                                                                Set rsQryCommentsB = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_b"), cint(0))
                                                            End If

                                                            pkgA = rsQry("pkg_name_a")
                                                            pkgB = rsQry("pkg_name_b")

                                                            If pkgA <> "" then
                                                                pkgname = pkgA
                                                            Else
                                                                pkgname = pkgB
                                                            End If

                                                            If changeType = "U" OR  changeType = "UW" Then
                                                                ChangeASource = false
                                                                ChangeAUpdate = false
                                                                ChangeBSource = false
                                                                ChangeBUpdate = false

                                                                'NewTextFile.WriteLine("<br><b><font face="&chr(34)&"arial"&chr(34)&">"&pkgname&"</font></b>")
                                                                NewTextFile.Write("<a href=""javascript:;"" class=""body_scol"" onClick=""toggleSPAN('"& rowId &"');"">"& pkgname &"</a>")
                                                                NewTextFile.WriteLine("<DIV class=divPkgInfo id=""spanPkgInfo"& rowId &""" name=""spanPkgInfo"" style=""display:none;"">")
                                                                NewTextFile.Write(rsQryA("rtag_name")&" uses: "&rsQry("pkg_version_a")&" (")
                                                                Call Release(rsQry("pv_id_a"))
                                                                NewTextFile.WriteLine(")<br>")
                                                                NewTextFile.Write(rsQryB("rtag_name")&" uses: "&rsQry("pkg_version_b")&" (")
                                                                Call Release(rsQry("pv_id_b"))
                                                                NewTextFile.WriteLine(")<br>")

                                                                a = rsQry("pv_id_a")
                                                                b = rsQry("pv_id_b")
                                                                c = rsQry("pv_id_a")
                                                                d = rsQry("pv_id_b")

                                                                Set pvCollectionA = CreateObject("Scripting.Dictionary")
                                                                Set pvCollectionB = CreateObject("Scripting.Dictionary")
                                                                On Error Resume Next
                                                                While CLng(a) <> CLng(b) and NOT errormsg

                                                                    'NewTextFile.WriteLine("A: "&a)
                                                                    'NewTextFile.WriteLine("B: "&b)
                                                                    pvCollectionA.Add CStr(a), Empty
                                                                    pvCollectionB.Add CStr(b), Empty
                                                                    If CLng(a) > CLng(b) Then
                                                                        'NewTextFile.WriteLine("TestA")
                                                                        Call LastPvIdA(a)
                                                                    ElseIf CLng(b) > CLng(a) Then
                                                                        'NewTextFile.WriteLine("TestB")
                                                                        Call LastPvIdB(b)
                                                                    End If
                                                                Wend

                                                                Set pvCollectionA = Nothing
                                                                Set pvCollectionB = Nothing

                                                                Call pkg_Version(a)
                                                                NewTextFile.Write("Common PARENT package version: "&pkgversion&" (")
                                                                Call Release(a)
                                                                NewTextFile.WriteLine(")<br><br>")
                                                                NewTextFile.WriteLine()
                                                                NewTextFile.WriteLine("<b>"&rsQryA("rtag_name")&"</b>")

                                                                If pkgversion <> rsQry("pkg_version_a") Then
                                                                    NewTextFile.WriteLine("<blockquote><b><i>Versions between "& pkgversion &" and "& rsQry("pkg_version_a")&"</i></b></blockquote>")

                                                                    If errormsg Then
                                                                        NewTextFile.WriteLine("Error determining root!<br>")
                                                                        NewTextFile.WriteLine()
                                                                    End If

                                                                    source_change = false

                                                                    While CLng(a) <> CLng(c) and NOT errormsg
                                                                        Call Comments(c)
                                                                        If scFlag = TRUE Then
                                                                            Call GetFixedIssues(c)
                                                                        End If
                                                                        Call LastPvIdAa(c)
                                                                        NewTextFile.WriteLine()
                                                                    Wend

                                                                    If source_change = false Then
                                                                        NewTextFile.WriteLine("<blockquote><b><i>No source changes to "& rsQryA("rtag_name")&". Only Rippled Builds.</i></b></blockquote><br>")
                                                                        ChangeASource = true
                                                                    End If

                                                                    Call pkg_Version(b)
                                                                    NewTextFile.WriteLine()
                                                                    NewTextFile.WriteLine()

                                                                ElseIf pkgversion = rsQry("pkg_version_a") Then
                                                                    NewTextFile.WriteLine("<blockquote><b><i>No updates to "& rsQryA("rtag_name")&"</i></b></blockquote><br>")
                                                                    ChangeAUpdate = true
                                                                    NewTextFile.WriteLine()
                                                                End If

                                                                NewTextFile.WriteLine("<b>"&rsQryB("rtag_name")&"</b>")

                                                                If pkgversion <> rsQry("pkg_version_b") Then
                                                                    NewTextFile.WriteLine("<blockquote><b><i>Versions between "& pkgversion &" and "& rsQry("pkg_version_b")&"</i></b></blockquote>")

                                                                    If errormsg Then
                                                                        NewTextFile.WriteLine("Error determining root!<br>")
                                                                        NewTextFile.WriteLine()
                                                                    End If

                                                                    source_change = false

                                                                    While CLng(b) <> CLng(d) and NOT errormsg
                                                                        Call Comments(d)
                                                                        If scFlag = TRUE Then
                                                                            Call GetFixedIssues(d)
                                                                        End If
                                                                        Call LastPvIdBb(d)
                                                                        NewTextFile.WriteLine()
                                                                    Wend

                                                                    If source_change = false Then
                                                                        NewTextFIle.WriteLine("<blockquote><b><i>No source changes to "& rsQryB("rtag_name")&". Only Rippled Builds.</i></b></blockquote><br>")
                                                                        ChangeBSource = true
                                                                    End If

                                                                ElseIf pkgversion = rsQry("pkg_version_b") Then
                                                                    NewTextFile.WriteLine("<blockquote><b><i>No updates to "& rsQryB("rtag_name")&"</i></b></blockquote><br>")
                                                                    ChangeBUpdate = true
                                                                    NewTextFile.WriteLine()
                                                                End If

                                                                NewTextFile.WriteLine("</DIV>")

                                                                If ChangeASource Then
                                                                    If ChangeBSource Then
                                                                        NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": .</b class=changesnone> Ripple Builds Only.</td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &": </b class=changesnone> Ripple Builds Only.</td>  </tr></table></blockquote>")
                                                                    ElseIf ChangeBUpdate Then
                                                                        NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": </b><span class=changesnone>Ripple Builds Only.</span></td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &": </b><span class=changesnone> No Updates.</span></td>  </tr></table></blockquote>")
                                                                    ElseIf NOT ChangeBSource AND NOT ChangeBUpdate Then
                                                                        NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""><tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>Ripple Builds Only.</span></td>    <td width=""50%"">    <b>"& Ucase(rsQryB("rtag_name")) &":</b> <b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")
                                                                    End If
                                                                End If

                                                                If ChangeBSource Then
                                                                    If NOT ChangeAUpdate Then
                                                                        If NOT ChangeASource AND NOT ChangeBUpdate Then
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": </b><b class=changesa> SOURCE CODE CHANGES</b>.</td>    <td width=""50%""> <b>"& Ucase(rsQryB("rtag_name")) &":</b> <span class=changesnone> Ripple Builds Only.</span></td>  </tr></table></blockquote>")
                                                                        End If
                                                                    End If
                                                                End If

                                                                If NOT ChangeASource Then
                                                                    If NOT ChangeAUpdate Then
                                                                        If NOT ChangeBSource AND NOT ChangeBUpdate Then
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <b class=changesa> SOURCE CODE CHANGES.</b></td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &":</b><b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")
                                                                        ElseIf ChangeBUpdate Then
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <b class=changesa> SOURCE CODE CHANGES.</b></td> <td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &":</b><span class=changesnone> No Updates.</span></td>  </tr></table></blockquote>")
                                                                        End If
                                                                    ElseIf ChangeAUpdate Then
                                                                        If NOT ChangeBSource AND NOT ChangeBUpdate Then
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>No Updates.</span></td> <td width=""50%"">  <b></font>"& Ucase(rsQryB("rtag_name")) &":</b><b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")
                                                                        ElseIf ChangeBSource Then
                                                                            NewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0"">  <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>No Updates.</span></td> <td width=""50%""> </font><b>"& Ucase(rsQryB("rtag_name")) &":</b> <span class=changesnone> Ripple Builds Only.</span></td>  </tr></table></blockquote>")
                                                                        End If
                                                                    End If
                                                                End If

                                                            End If  'changeType = "U" OR  changeType = "UW"

                                                        End If  'email

                                                    End If 'NOT (GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE) = "checked" AND changeType = "UR")

                                                    rsQry.MoveNext
                                                WEnd

                                                rsQry.Close
                                                Set rsQry = Nothing
                                                %>
                                                <%
                                                Call Footer()
                                                NewTextFile.Close
                                                Set NewTextFile=Nothing
                                                %>
                                            </table>
                                            <br>
                                        <%Else%>
                                            <br>
                                            <%
                                            If (parRtagB <> "") Then
                                                Call Messenger ( "Select <b>Release A</b> to compare.", 3, "100%" )
                                            ElseIf (parRtagA <> "") Then
                                                Call Messenger ( "Select <b>Release B</b> to compare.", 3, "100%" )
                                            Else
                                                Call Messenger ( "Select <b>Release A</b> and <b>Release B</b> to compare.", 3, "100%" )
                                            End If
                                            %>
                                        <%End If%>
                                    </td>
                                    <td width="1%" background="images/lbox_bgside_white.gif">&nbsp;</td>
                                </tr>
                                <tr>
                                    <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
                                    <td background="images/lbox_bg_blue.gif"></td>
                                    <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>
                <!-- DIFF END ---------------------------------------------------->
            </td>
            <td valign="top" background="images/bg_home_orange.gif">

                <!-- SELECT RELEASE B ---------------------------------------------->
                <br>
                <table width="100%"  border="0" cellspacing="10" cellpadding="0">
                    <tr>
                        <td align="left" class="body_col">
                            <img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13">&nbsp;Select Release B<hr size="1px" color="Olive" noshade>
                        </td>
                    </tr>
                    <tr>
                        <td align="left">
                            <select name="projB" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagB );">
                                <option value="">-- Select Project --</option>
                                <%
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorB.Item("proj_id"),    ORAPARM_INPUT, ORATYPE_NUMBER

                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))

                                OraDatabase.Parameters.Remove "PROJ_ID"

                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                                    <option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option>
                                    <%rsQry.MoveNext
                                WEnd

                                rsQry.Close
                                Set rsQry = Nothing
                                %>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td align="left">
                            <select name="rtagB" id="rtagB" class="form_item">
                                <%
                                OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorB.Item("proj_id"),    ORAPARM_INPUT,  ORATYPE_NUMBER
                                OraDatabase.Parameters.Add "RTAG_ID",     objRelCollectorB.Item("rtag_id"),    ORAPARM_INPUT, ORATYPE_NUMBER

                                Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))

                                OraDatabase.Parameters.Remove "PROJ_ID"
                                OraDatabase.Parameters.Remove "RTAG_ID"

                                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                                        <option value="<%=rsQry("rtag_id")%>" <%=rsQry("selected")%>><%=rsQry("rtag_name")%></option>
                                    <%rsQry.MoveNext
                                WEnd

                                rsQry.Close
                                Set rsQry = Nothing
                                %>
                            </select>
                        </td>
                    </tr>
                    <%If (parRtagB <> "") Then%>
                        <tr>
                            <td align="left"><a href="dependencies.asp?rtag_id=<%=parRtagB%>" class="body_txt_drk">Go To Release B &raquo;</a></td>
                        </tr>
                    <%End If%>
                </table>
                <!-- SELECT RELEASE B END ---------------------------------------------->
            </td>
        </tr>
        <tr>
            <td valign="bottom" align="center" background="images/bg_home_orange.gif">
                <img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30">
            </td>
            <td valign="bottom" background="images/bg_home_orange.gif" align="center">
                <img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30">
            </td>
      </tr>
    </table>
</form>
<%
If email Then
    Dim LocalPath
    LocalPath = Server.MapPath("docs\compareReleases_"&objAccessControl.UserName&".html")

    Send_Email    "Release Manager Notification",_
                     ADMIN_EMAIL, _
                     objAccessControl.UserEmail,_
                     "Release Comparisons from Release Manager", _
                     "Your requested report...",_
                     LocalPath
End If
%>
<!-- FOOTER -->
<!--#include file="_footer.asp"-->
</body>
</html>