Subversion Repositories DevTools

Rev

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

<%
'=====================================================
'   _form_new_version_page.asp
'                      PAGE
'=====================================================
%>
<!--#include file="_tabs.asp"-->
<!--#include file="_drawExtensionSelectBox.asp"-->
<!--#include file="class/classSortHelper.asp"-->
<!--#include file="_jquery_includes.asp"-->
<!-- TIPS -->
<script language="JavaScript" src="images/tipster.js?ver=<%=VixVerNum%>"></script>
<script language="JavaScript" type="text/JavaScript">
formTips.tips.BuildType = stdTip(200, 'Build Type',
                                 'Auto Build packages are built by the VIX build daemons for release. ' +
                                 'Manually built packages will not be built by the build daemons.'+
                                 '<p>Manually built packages are very rare and not available to most developers');
formTips.tips.ChangeType = stdTip(200, 'Version Number Assignment',
                                  'Auto: The build system will determine the version number based on the Change Type' +
                                  '<p>Manual: The user specifies the version number to be used');
formTips.tips.Licence = stdTip(250, 'Software Licence',
                                 'All 3rd party software MUST be identifed.');
formTips.tips.Existing = stdTip(250, 'Existing Version',
                                 'Existing versions versions are shown for reference purposes. ' +
                                 'They may be used when manually versioning a package.' +
                                 '<p>This is not the version that the new packages is derived from.');


</script>
<%
'------------ Variable Definition -------------
Dim parPv_id
Dim rsLocRel
Dim parPage_title
Dim objPkgInfo
Dim rsTemp2
Dim rsLatest
Dim aVersions
Dim lastRow, i
Dim objSortHelper
Dim newPackage
Dim majorState
Dim minorState
Dim patchState
Dim parBase_view_id
Dim verNumber
Dim parPkgName
Dim parRename
Dim rFile
Dim disableBuildType
Dim bCanRenamePackage
Dim parPkgId
Dim bNewerVersions
Dim sNewerVersionsOptions

'------------ Constants Declaration -----------

'-----------------------------------------------------------------------------------------------------------------------------
Sub GetPackageInfo( nPvId, outPkgInfo )
   Dim rsTemp, Query_String
   If (IsEmpty(nPvId) OR newPackage> 0) Then Exit Sub

   Query_String = _
   " SELECT pv.pv_id, pkg.pkg_id, pkg.pkg_name, pv.pkg_version, pv.v_ext, pv.change_type, pv.build_type, pv.is_patch"&_
   "  FROM packages pkg, package_versions pv"&_
   " WHERE pkg.pkg_id = pv.pkg_id  AND pv.pv_id ="& nPvId

   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
      outPkgInfo.Item("pv_id") = rsTemp.Fields("pv_id")
      outPkgInfo.Item("pkg_id") = rsTemp.Fields("pkg_id")
      outPkgInfo.Item("pkg_name") = rsTemp.Fields("pkg_name")
      outPkgInfo.Item("pkg_version") = rsTemp.Fields("pkg_version")
      outPkgInfo.Item("change_type") = rsTemp.Fields("change_type")
      outPkgInfo.Item("build_type") = rsTemp.Fields("build_type")

      If rsTemp.Fields("is_patch") = "Y" Then
        outPkgInfo.Item("is_patch") = "true"
      Else
        outPkgInfo.Item("is_patch") = "false"
      End If

      if rsTemp.Fields("v_ext") <> "" Then
        outPkgInfo.Item("v_ext") = rsTemp.Fields("v_ext")
      Else
        outPkgInfo.Item("v_ext") = ""
      End If
   End If

   rsTemp.Close
   Set rsTemp = nothing
End Sub

'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Latest_All_Ext ( NNpkg_id, nPv_id )
    Get_Latest_All_Ext = _
    " SELECT pv.pkg_version, pv.dlocked,"&_
    "        DECODE ( pv.pv_id, "& nPv_id &", 'selected', NULL ) AS selected"&_
    "    FROM PACKAGES pkg, package_versions pv"&_
    "   WHERE pkg.pkg_id = pv.pkg_id  AND  pkg.pkg_id = "& NNpkg_id
End Function

'-----------------------------------------------------------------------------------------------------------------------------
'   If there is exactly one version of this package, then it can be renamed
'   Return 0 or 1
'
Function CanRenamePackage(NNpkg_id)
    Dim rsTemp, Query_String, count
    CanRenamePackage = 0

   Query_String = "select count(*) as count from package_versions where pkg_id=" & NNpkg_id

   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
      count = rsTemp.Fields("count")
      If count = 1 Then
          CanRenamePackage = 1
      End If
   End If

   rsTemp.Close
   Set rsTemp = nothing
End Function

'-------------------------------------------------------------------------------------------------------------
' Returns TRUE if the specified version has a COTS extension
' Really determines if the extension has to be strict Major.Minor.PatchBuild
' or is allowed to be more relaxes. As in COTS and TOOL packages.
'
' Read from the database to determine type
' If we cannot determine the project suffix then assume the worst
'
Function HasCotsExtension(aExt)
   Dim rsQry, Query_String
   HasCotsExtension = FALSE

   if aExt <> "" Then
       Query_String = "SELECT EXT_NAME FROM PROJECT_EXTENTIONS pe WHERE " &_
                      "pe.IS_COTS='Y' AND pe.EXT_NAME='" & LCase(aExt) & "'"
       Set rsQry = OraDatabase.DbCreateDynaset( Query_String, ORADYN_DEFAULT )
       If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
           HasCotsExtension = TRUE
       End If
       rsQry.Close
   Else
       HasCotsExtension = TRUE
   end If
   Set rsQry = Nothing

End Function

'-------------------------------------------------------------------------------------------------------------
'Returns TRUE if the specified version has a patch-build number.
Function HasPatchBuildNumber(aversion)
   'test for a version with a patch build number, ie a dot and at least 4 digits before the extenstion.
   Dim re: Set re = New RegExp
   re.Pattern = "\.\d{4,}\.[^\.]+$"
   HasPatchBuildNumber = re.Test(aversion)
   Set re = Nothing      
End Function

'-------------------------------------------------------------------------------------------------------------
'Returns TRUE if the specified version has a well formed version number
Function HasWellFormedVersion(aversion)
   'If a package has a major.minor.patch-build number then it is well formed
   Dim re: Set re = New RegExp
   re.Pattern = "^\d+\.\d+\.\d{4,}\.[^\.]+$"
   HasWellFormedVersion = re.Test(aversion)
   Set re = Nothing      
End Function

'-----------------------------------------------------------------------------------------------------------------------------
Sub Get_All_Licences ( NNnewlicence_id )
   Dim rsTemp, Query_String, selected

   Response.write "<option value='-1'>"& "100% Vix Developed" &"</option>"

   Query_String = _
   "   SELECT licence, name"&_
   "     FROM licences "&_
   "    ORDER BY name ASC"

   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

   While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
      selected = ""
      If NNnewlicence_id = Cstr( rsTemp.Fields("name")) Then
          selected = " selected"
      End If
      Response.write "<option value='"& rsTemp("licence") &"' "& selected &">"& rsTemp("name") &"</option>"

      rsTemp.MoveNext
   WEnd

   rsTemp.Close
   Set rsTemp = nothing
End Sub

'-----------------------------------------------------------------------------------------------------------------------------
Sub Get_All_Base_Views ( NNnewgroup_id )
   Dim rsTemp, Query_String

   Query_String = _
   "   SELECT vi.view_id, vi.view_name "&_
   "     FROM views vi "&_
   "    WHERE UPPER(vi.base_view) = 'Y'"&_
   "    ORDER BY vi.view_name ASC"

   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

   While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
      If NNnewgroup_id = Cstr( rsTemp.Fields("view_id")) Then
         Response.write "<option value='"& rsTemp("view_id") &"' selected>"& rsTemp("view_name") &"</option>"
      Else
         Response.write "<option value='"& rsTemp("view_id") &"'>" & rsTemp("view_name") &"</option>"
      End If

      rsTemp.MoveNext
   WEnd

   rsTemp.Close
   Set rsTemp = nothing
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Get_All_Personal_Views ( NNuser_id )
   Dim rsTemp, Query_String
   If NNuser_id = "" Then Exit Sub

   Query_String = _
   " SELECT vi.view_id, vi.view_name"&_
   "  FROM view_settings vs,"&_
   "       views vi"&_
   " WHERE vs.view_id = vi.view_id"&_
   "   AND vs.user_id = vi.owner_id  "&_
   "   AND vs.user_id = "& NNuser_id &_
   "   AND vi.base_view = 'N'"&_
   " ORDER BY UPPER(vi.view_name)"

   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

   While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
      Response.write "<option value='"& rsTemp.Fields("view_id") &"'>"& rsTemp.Fields("view_name") &"</option>"

      rsTemp.MoveNext
   WEnd

   rsTemp.Close
   Set rsTemp = nothing
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Get_Newer_Versions()
   Dim rsTemp, Query_String, el
   bNewerVersions = False

   If isNULL(parPv_id) OR parRename Then Exit Sub

   Query_String = _
        "SELECT" &_
        "    pv.pv_id," &_
        "    pv.pkg_version," &_
        "    pv.dlocked," &_
        "    TO_CHAR( pv.created_stamp,'DD-Mon-YYYY HH24:MI:SS' ) AS created_stamp" &_
        " FROM" &_
        "    package_versions pv," &_
        "    package_versions pvc" &_
        " WHERE" &_
        "    pv.created_stamp> pvc.created_stamp" &_
        "    AND pv.pkg_id = pvc.pkg_id" &_
        "    AND NVL(pvc.v_ext, 'isNULL') = NVL(pv.v_ext, 'isNULL')" &_
        "    AND pvc.build_type != 'Y'" &_
        "    AND pvc.pv_id = " & parPv_id &_
        " ORDER by pv.created_stamp desc"

   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
   sNewerVersionsOptions = ""
   While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
       bNewerVersions = True
       el = IIF(rsTemp("dlocked") = "Y", "R&nbsp;", "&nbsp;&nbsp;&nbsp;&nbsp;") & rsTemp("pkg_version") & "&nbsp;&nbsp;" & rsTemp("created_stamp")
       sNewerVersionsOptions = sNewerVersionsOptions & "<option>" & el & "</option>"
      rsTemp.MoveNext
   WEnd

   rsTemp.Close
   Set rsTemp = nothing

End Sub
'-----------------------------------------------------------------------------------------------------------------------------

%>
<%
'===================== MAIN LINE ============================
Dim bDisableAuto, bPatchOnly, bIsCots, bIsAuto

'------------ Variable Init -------------------
parPv_id = QStrPar("pv_id")
parBase_view_id = Request("base_view_id")
parPkgName = QStrPar("pkgName")
parRename = QStrPar("renameMode")
rFile = QStrPar("rFile")
bCanRenamePackage = 0
parPkgId = 0
If IsEmpty(rFile) OR rFile = "" Then
    rFile="dependencies.asp"
End If

newPackage = 0
 
parPage_title = "NEW VERSION"

If ( parPkgName <> "" OR IsEmpty(parPv_id) ) Then
    newPackage = 1
    parPv_id = NULL
End if
    
majorState = ""
minorState = ""
patchState = "checked"

' The build_type will be displayed but not enabled unless the user
' is allowed to created manually built packages
disableBuildType = FALSE
If parRename <> "" OR NOT canActionControlInProject("ApproveForManualBuild") Then
    disableBuildType = TRUE
End If

Set objPkgInfo = CreateObject("Scripting.Dictionary")

If parRename <> "" Then
    If parRename <> 2 Then
        parPage_title = "RENAME VERSION"
    Else
        parPage_title = "VERSION CHANGE TYPE"
    End If

    ' Package already exists
    Call GetPackageInfo( parPv_id, objPkgInfo )
    parPkgName = objPkgInfo.Item("pkg_name")
    If parRename <> 2 Then
        parPkgId = objPkgInfo.Item("pkg_id")
        bCanRenamePackage = CanRenamePackage(parPkgId)
    End If

    ' Extract version number without extension
    verNumber = objPkgInfo.Item("pkg_version")
    verNumber = Mid( verNumber,1, Len(verNumber) - Len(objPkgInfo.Item("v_ext")))

    'Determine current version mechanism: auto, manual
    bIsAuto = objPkgInfo.Item("change_type") <> "F"
    bIsCots = HasCotsExtension(objPkgInfo.Item("v_ext"))
    'Disable the "Auto" build option if the package is a COTS package and the version doesn't have a patch-build number.
    bDisableAuto = bIsCots and not HasPatchBuildNumber(objPkgInfo.Item("pkg_version")) and not bIsAuto
    'Enable only the "Patch Change" option if the package is a COTS package and the version has a patch-build number.
    bPatchOnly = bIsCots and not HasWellFormedVersion(objPkgInfo.Item("pkg_version")) and HasPatchBuildNumber(objPkgInfo.Item("pkg_version"))

    ' Use existing change type and build type
    If bDisableAuto Then
        bIsAuto = False
    End If

    majorState = ""
    minorState = ""
    patchState = ""
    If objPkgInfo.Item("change_type") = "M" Then
        majorState = "checked"
    ElseIf objPkgInfo.Item("change_type") = "N" Then
        minorState = "checked"
    Else
        patchState = "checked"
    End If

ElseIf NOT (newPackage> 0 ) Then
    ' Package already exists
    ' Creating a new Version of an existing Package
    '   Set build_type to Auto - New Versions start in Auto
    Call GetPackageInfo( parPv_id, objPkgInfo )
    objPkgInfo.Item("build_type") = "A"

    parPkgName = objPkgInfo.Item("pkg_name")

    ' Extract version number without extension
    verNumber = objPkgInfo.Item("pkg_version")
    verNumber = Mid( verNumber,1, Len(verNumber) - Len(objPkgInfo.Item("v_ext")))

    bIsCots = HasCotsExtension(objPkgInfo.Item("v_ext"))
    'Disable the "Auto" build option if the package is a COTS package and the version doesn't have a patch-build number.
    bDisableAuto = bIsCots and not HasPatchBuildNumber(objPkgInfo.Item("pkg_version"))
    'Enable only the "Patch Change" option if the package is a COTS package and the version has a patch-build number.
    bPatchOnly = bIsCots and not HasWellFormedVersion(objPkgInfo.Item("pkg_version")) and HasPatchBuildNumber(objPkgInfo.Item("pkg_version"))

    'if "Auto" build option is disabled then select the Manual option
    bIsAuto = NOT bDisableAuto
    If bDisableAuto Then
        objPkgInfo.Item("build_type") = "M"
    End If

Else
    ' If New Package and First version
    parPage_title = "NEW PACKAGE and FIRST VERSION"
    bIsCots = FALSE
    bDisableAuto = FALSE
    bPatchOnly = FALSE
    bIsAuto = TRUE
    majorState = "checked"
    minorState = ""
    patchState = ""
    verNumber = "1.0.0000"
    objPkgInfo.Item("is_patch") = "false"
End If

'============================================================
%>
<script language="JavaScript" type="text/JavaScript">
<!--
var savedVersion;
var fieldError;
var checkMode;

window.onload = function(e)
{
   // Init checking mode
   //   0 - Checking options one at a time
   //       Clear Error display before checking
   //
   //   1 - Checking before submit
   //       Accumulate error messages
   //
   checkMode = 0;

   savedVersion = "<%=verNumber%>";
   document.getElementById('FRvnumber').value = savedVersion;

   // Init the Build Type
   // Will be disabled for Rename or User cannot create Manually Built Packages
   //
   changeToAutoBuild('<%=objPkgInfo.Item("build_type")%>');
   <%If disableBuildType Then%>
   changeToAutoBuild('D');
   <% End If %>

   var isAutobuild = document.NEWversion.version_type[0].checked;
   if (!isAutobuild) {
      changeToManualVersionNumberAssignment();
   } else {
      changeToAutoVersionNumberAssignment();
   }
   updateCopyButton();
   checkPackage();
   checkBaseView();
   checkLicence();

   // Hide error message
   setIdText('eMessage','');
}

function setIdText(id, text) {
    var element = document.getElementById(id);
    if ( element ) {
    while (element.firstChild!==null)
        element.removeChild(element.firstChild); // remove all existing content
    element.appendChild(document.createTextNode(text));
    }
}

//////////////////////////////////////////////////////////////////
// Function: changeToAutoVersionNumberAssignment
//
// Purpose: Hide the relevant sections of the form
//
function changeToAutoVersionNumberAssignment()
{
   document.getElementById('change_type1').style.display = 'table-row';
   //document.getElementById('pkgver').style.display = 'none';
   savedVersion = document.getElementById('FRvnumber').value;
   document.getElementById('FRvnumber').disabled = true;
   <%If NOT newPackage> 0 Then%>
   document.getElementById('FRuseVersion').style.visibility = 'hidden';
   <%End If%>
   document.getElementById('FRvnumber').value = '(auto)';
   checkVersionNumber();
   resizeFrame();
}

//////////////////////////////////////////////////////////////////
// Function: changeToManualVersionNumberAssignment
//
// Purpose: Show the relevant sections of the form
//
function changeToManualVersionNumberAssignment()
{
   document.getElementById('change_type1').style.display = 'none';
   //document.getElementById('pkgver').style.display = 'table-row';
   document.getElementById('FRvnumber').disabled = false;
   <%If NOT newPackage> 0 Then%>
   document.getElementById('FRuseVersion').style.visibility = 'visible';
   <%End If%>
   if ( savedVersion.indexOf('(') != 0) {
       document.getElementById('FRvnumber').value = savedVersion;
   } else {
       document.getElementById('FRvnumber').value = "";
   }
   checkVersionNumber();
   resizeFrame();
}

//////////////////////////////////////////////////////////////////
// Function: changeToAutoBuild
//
// Purpose: Maintain the Manual Auto Build state
//
var changeToAutoBuildData = new Array;
function changeToAutoBuild (mode)
{
    //  Set to Disable Mode
    //      Display only - no editing allowed
    if (mode == 'D')
    {
        document.NEWversion['build_type_M'].disabled = true;
        document.NEWversion['build_type_A'].disabled = true;
    }

    //  Set to Manual
    //      Remember current version_type
    //      Force version_type to manual
    //      Disable ability to set auto version type
    if (mode == 'M')
   {
       changeToAutoBuildData['M'] =  document.NEWversion['version_type_M'].checked;
       changeToAutoBuildData['A'] =  document.NEWversion['version_type_A'].checked;

       document.NEWversion['build_type_M'].checked = true;
       document.all['build_type'].value = 'M';
       document.NEWversion['version_type_M'].checked = true;
       document.NEWversion['version_type_A'].disabled = true;
       changeToManualVersionNumberAssignment();
   }

    //  Set to Auto
    //      Enable auto version_type
    //      Restore version type to previous value
   if (mode == 'A')
   {
       document.NEWversion['build_type_A'].checked = true;
       document.NEWversion['version_type_A'].disabled = false;
       document.all['build_type'].value = 'A';

       if (typeof changeToAutoBuildData['M'] != 'undefined')
       {
           document.NEWversion['version_type_M'].checked = changeToAutoBuildData['M'];
           document.NEWversion['version_type_A'].checked = changeToAutoBuildData['A'];

           if (document.NEWversion['version_type_M'].checked)
           {
               changeToManualVersionNumberAssignment();
           }
           else
           {
               changeToAutoVersionNumberAssignment();
           }
       }
   }
}

//////////////////////////////////////////////////////////////////
//  Function: updateCopyButton
//  Args:     data - New data value
function updateCopyButton ()
{
    var e = document.getElementById("FRpkgver");
    var el = document.getElementById('FRuseVersion');
    if (e && el) {
        var data = e.value;
        el.disabled = (data.indexOf('(') == 0)
    }
}

//////////////////////////////////////////////////////////////////
// Function: useVersion
//
// Purpose: Insert current version ino the version field
//          Attached to: FRuseVersion
//
function useVersion()
{
    var e = document.getElementById("FRpkgver");
    if (e) {
        var strUser = e.value;
        if ( strUser.indexOf('(') != 0) {
            var patt = /\.[a-z]{1,4}$/i;
            strUser = strUser.replace(patt,'');
            document.getElementById('FRvnumber').value = strUser;
            checkVersionNumber();
        }
    }
}

//////////////////////////////////////////////////////////////////
// Function: checkPackage
//
// Purpose:
// Returns: A promise 
//
function checkPackage()
{
    var f = document.getElementById('NEWversion');
    if ( f.newPackage.value> 0 || f.renamePackage.value> 0 ) {
        reseteMessage();
        MM_validateForm("--Silent",'FRpkgName','Package Name','RisPackage');
        checkPackageHighlight( ! document.MM_returnValue, 'Name well formed', 'Invalid Characters in name');
        if ( ! document.MM_returnValue ) return jQuery.Deferred().resolve();;

        MM_showProgressBar();
        return jQuery.get('_json_checkPackage.asp',{
                       packageName :  document.getElementById('FRpkgName').value,
                       Opr : 'checkName'
                   }, function(){}, 'json'
            ).done(function(data, textStatus, jqXHR){
                try {
                    var f = document.getElementById('NEWversion');
                    var pkgId = f.FRpkgId.value;
                    if ( !(pkgId != 0 && data.result == pkgId)) {
                        checkPackageHighlight(data.result != 0, 'Name is unused', 'Package Exists');
                    } else {
                        checkPackageHighlight(0, '', '');
                    }
                }
                catch(e) {
                    checkPackageHighlight( 1, '','Error in AJAX operation');
                }
            }).fail(function(jqXHR, textStatus, errorThrown){
                checkPackageHighlight( 1, '','Error in AJAX operation');
            }).always(function(){
                MM_hideProgressBar();
                resizeFrame();
            });
    }
    return jQuery.Deferred().resolve();
}
function checkPackageHighlight(v, msggood, msgbad)
{
    if (v)
    {
        setIdText('cpError',msgbad);
        addClass(document.getElementById('FRpkgName'), 'form_error' );
        showeMessage(document.MM_error);
        fieldError = true;
    }
    else
    {
        setIdText('cpError',msggood);
        removeClass(document.getElementById('FRpkgName'), 'form_error' );
    }
}

function checkBaseView()
{
    var f = document.getElementById('NEWversion');
    if ( f.newPackage.value> 0 )
    {
        reseteMessage();
        MM_validateForm("--Silent",'base_view_id','Base View','R');
        if ( ! document.MM_returnValue )
        {
            addClass(document.getElementById('base_view_id'), 'form_error' );
            setIdText('bvError','Required');
            fieldError = true;
        }
        else
        {
            removeClass(document.getElementById('base_view_id'), 'form_error' );
            setIdText('bvError','');
        }
    }
}

function checkLicence()
{
    var f = document.getElementById('NEWversion');
    if ( f.newPackage.value> 0 )
    {
        reseteMessage();
        MM_validateForm("--Silent",'licence_id','Licence','R');
        if ( ! document.MM_returnValue )
        {
            addClass(document.getElementById('licence_id'), 'form_error' );
            setIdText('liError','Required');
            fieldError = true;
        }
        else
        {
            removeClass(document.getElementById('licence_id'), 'form_error' );
            setIdText('liError','');
        }
    }
}

// Returns: A promise 
function checkVersionNumber()
{
   reseteMessage();

   // Show/Hide COTS helper message
   var ii = document.all['v_ext'].selectedIndex;
   var isCots =  document.all['v_ext'].options[ii].hasAttribute('iscots');
   Visible('cotsHint', isCots ? 'block': 'none' );

   if (document.NEWversion.version_type[0].checked)
   {
        removeClass(document.getElementById('FRvnumber'), 'form_error' );
        setIdText('vnError','');

        var versionExt = document.all['v_ext'].value;
        document.all['FRnewver'].value = versionExt;
        return jQuery.Deferred().resolve();
   }
   else
   {
        // Get Full version - store into hidden field processing
        var versionExt = document.all['v_ext'].value;
        var versionBase = document.all['FRvnumber'].value;
        document.all['FRnewver'].value = versionBase + versionExt;

        // check the version number is good
        MM_validateForm("--Silent",{vBase:versionBase, vExt:versionExt, isPatch:<%=objPkgInfo.Item("is_patch")%>},'Version Number','RisVersionNumber');
        if ( ! document.MM_returnValue )
        {
            addClass(document.getElementById('FRvnumber'), 'form_error' );
            setIdText('vnError','Invalid form');
            showeMessage(document.MM_error);
            fieldError = true;
            return jQuery.Deferred().resolve();
        }

        MM_showProgressBar();
        return jQuery.get('_json_checkPackage.asp',{
                       packageName :  document.getElementById('FRpkgName').value,
                       Opr : 'checkVer',
                       Version : document.all['FRvnumber'].value + document.all['v_ext'].value
                   }, function(){}, 'json'
            ).done(function(data, textStatus, jqXHR){

                    if(data.error) {
                        addClass(document.getElementById('FRvnumber'), 'form_error' );
                        setIdText('vnError','Error in AJAX operation');
                        showeMessage(data.emsgSummary);
                        fieldError = true;

                    } else if(data.result != 0) {
                        addClass(document.getElementById('FRvnumber'), 'form_error' );
                        setIdText('vnError','Exists');
                        showeMessage('Version already exists');
                        fieldError = true;

                    } else {
                        removeClass(document.getElementById('FRvnumber'), 'form_error' );
                        setIdText('vnError','');
                    }
            }).fail(function(jqXHR, textStatus, errorThrown){
                checkPackageHighlight( 1, '','Error in AJAX operation');
            }).always(function(){
                MM_hideProgressBar();
                resizeFrame();
            });
    }
}

function checkReason()
{
   reseteMessage();
    MM_validateForm("--Silent",'FRreason','Reason for This Version','maxLength:4000');
    if ( ! document.MM_returnValue )
    {
        addClass(document.getElementById('FRreason'), 'form_error' );
        //setIdText('frError','Too Long');
        
        showeMessage(document.MM_error);
        fieldError = true;
    }
    else
    {
        removeClass(document.getElementById('FRreason'), 'form_error' );
        //setIdText('frError','');
    }
}

function getCheckedRadio(radio_group) {
    for (var i = 0; i < radio_group.length; i++) {
        var button = radio_group[i];
        if (button.checked) {
            return button;
        }
    }
    return undefined;
}

<%If parRename <> "" Then%>
function updateVersionInfo()
{
   reseteMessage();
   var urlArgs = {
       packageName : document.getElementById('FRpkgName').value,
       Version : document.all['FRvnumber'].value + document.all['v_ext'].value,
       buildType : document.all['build_type'].value,
       changeType : document.all['change_type'].value,
       rtagId : document.all['rtag_id'].value,
       pvId : document.all['OLDpv_id'].value,
       vExt : document.all['v_ext'].value,
       Opr : 'updateVer'
   };

   var f = document.getElementById('NEWversion');
   if ( f.renamePackage.value> 0 ) {
       urlArgs.Mode = 1;
   }

   return jQuery.get('_json_updateVersion.asp',urlArgs, function(){}, 'json'
       ).done(function(data, textStatus, jqXHR){
           if(data.error) {
               showeMessage(data.emsgDetails);
               fieldError = true;

           } else if(data.result != 0) {
               showeMessage('Error changing version number');
               fieldError = true;
           }

       }).fail(function(jqXHR, textStatus, errorThrown){
           checkPackageHighlight( 1, '','Error in AJAX operation');
       }).always(function(){
           MM_hideProgressBar();
           resizeFrame();
       });
}
<%End If%>

function reseteMessage()
{
    if (checkMode == 0 )
    {
        setIdText('eMessage','');
    }
}

function showeMessage(msg)
{
    var omsg, elem;
    if (checkMode == 1 )
    {
        elem = document.getElementById("eMessage");
        omsg = elem.textContent || elem.innerText;
        if ( (typeof osmg != 'undefined') && omsg.length> 0 )
            omsg += '\n';
    }
    else
    {
        omsg = "";
    }
    omsg += msg;
    setIdText('eMessage',omsg);
}

// Do not remove these next few lines, otherwise the page does not load properly in Microsoft IE.
//-->
</script>

<script>

<%If NOT bInIframe Then %>
    function Dependency() {
    <%If parRename <> "" Then%>
       parent.window.close();
    <%ElseIf newPackage> 0 Then%>
       parent.window.location.href="<%=rFile%>?rtag_id=<%=parRtag_id%>";
    <%Else%>
       parent.window.location.href="<%=rFile%>?rtag_id=<%=parRtag_id%>&pv_id=<%=parPv_id%>";
    <%End If%>
    }

    function resizeFrame() {
    }
<%Else%>
    function Dependency() {
                parent.closeIFrame();
    }

    function resizeFrame() {
        parent.resizeIframe();
    }
<%End If%>

////////////////////////////////////////////////////////////////////////////////////////////////////////
// This function returns true if form validation passes, else false
// It is called when a user hits the submit button.
////////////////////////////////////////////////////////////////////////////////////////////////////////

function  validateFormNEWversion()
{
    var f = document.getElementById('NEWversion');

    if (f == null)
        vixAlert('Internal Error<p>Failed To Get NEWversion');   // should never happen unless a coding/rendering mistake is made?
    else
    {
        setIdText('eMessage','');
        fieldError = false;
        checkMode = 1;
        checkPackage().always(function(){
            checkBaseView();
            checkLicence();
            checkVersionNumber().always(function(){
                <%If NOT parRename <> "" Then%>
                checkReason();
                <%End If%>
                if (!fieldError)
                {
                    //  Export the change_type field in a sanitised form
                    var ct = getCheckedRadio(document.forms.NEWversion.elements.change_type1).value;
                    if(!document.NEWversion.version_type[0].checked) ct = 'F';
                    document.all['change_type'].value = ct;

                    MM_showProgressBar();
                    <%If parRename <> "" Then%>
                        updateVersionInfo().always(function(){
                            if (!fieldError)
                            {
                                <%If NOT bInIframe Then %>
                                    parent.window.close();
                                    window.opener.document.location='<%=rFile%>?rtag_id=<%=parRtag_id%>&pv_id=<%=parPv_id%>';
                                <%Else%>
                                    window.parent.location.reload(false);
                                <%End If%>
                                return false;
                            }
                        });
                    <%Else%>
                        f.action='_new_version.asp';
                        f.submit();
                        return false;
                    <%End If%>
                }
                // Hide progress bar that is exposed because the previous tests were OK
                MM_hideProgressBar();
                resizeFrame();
                checkMode = 0;
            });
        });
    }
    return false;
}

</script>
<!-- _form_new_version_page.asp -->
<table width="650px" border="0" cellspacing="0" cellpadding="0">
   <tr>
      <td>
<%If NOT bInIframe Then %>
         <table width="100%" border="0" cellspacing="0" cellpadding="0" class='rounded_box'>
             <caption><%=parPage_title%></caption>
<%Else%>
         <table width="100%" border="0" cellspacing="0" cellpadding="0">
<%End If%>
            <tr>
               <td valign="top">
                  <!-- Body -->
                  <div class='Panel <%=IIF(NOT bInIframe,"PanelFrame","tight")%>'>
                     <form id="NEWversion"  name="NEWversion" method="post">
                      <table width="100%" border="0" cellspacing="1" cellpadding="5" class='lhsGrey PanelPad'>

                         <!-- Package Name -->
                         <tr>
                            <td>Package Name</td>
                           <% if newPackage> 0 OR bCanRenamePackage> 0 Then %>
                                <td>
                                  <input type="text" id="FRpkgName" name="FRpkgName"  size="40" value="<%=parPkgName%>" onBlur="checkPackage()">
                                  <span id="cpError"></span>
                                </td>
                            <% Else %>
                                <td class="form_field"><%=parPkgName%></td>
                            <% End If %>
                         </tr>

                         <!--Base View -------------->
                         <% if newPackage> 0 Then %>
                            <tr>
                                <td>To Base View</td>
                                <td width="1%" nowrap>
                                   <select name="base_view_id" id="base_view_id" class="form_item" onBlur="checkBaseView()">
                                      <option></option>
                                      <%Call Get_All_Base_Views(parBase_view_id)%>
                                   </select>
                                   <span id="bvError"></span>
                                </td>
                             </tr>

                         <!--Personal View -------------->
                           <%If QStrPar("Pview") <> "disable" Then%>
                            <tr>
                                <td>To Personal View</td>
                               <td width="1%" nowrap background="images/bg_form_lightgray.gif">
                                  <select name="personal_view_id">
                                     <option value="">None</option>
                                     <%Call Get_All_Personal_Views(objAccessControl.UserId )%>
                                  </select>
                               </td>
                            </tr>
                            <%End If%>

                            <!-- Software Licence ----------------->
                            <tr>
                               <td>Software Licence<%=Quick_Help("Licence")%></td>
                                <td width="1%" nowrap>
                                   <select name="licence_id" id="licence_id" class="form_item" onBlur="checkLicence()">
                                      <option></option>
                                      <%Call Get_All_Licences(-2)%>
                                   </select>
                                   <span id="liError"></span>
                                </td>
                            </tr>

                         <!--Dummy Line to highlight New Package Data -------------->
                            <tr>
                                <td></td>
                                <td class="form_field"></td>
                            </tr>
                         <% End If %>

                         <!-- Build Type Assignment ----------------->
                         <tr>
                            <td>Build Type<%=Quick_Help("BuildType")%></td>
                            <td>
                                <input name="build_type1" id="build_type_A" type="radio" value="A" checked onclick="changeToAutoBuild('A');"> Auto
                                <input name="build_type1" id="build_type_M" type="radio" value="M" onclick="changeToAutoBuild('M');"> Manual
                            </td>
                         </tr>
                         <!--Version Number Assignment -------------->
                         <tr>
                               <%
                                    Dim flagAuto, flagMan
                                    if bDisableAuto Then
                                        flagAuto = "disabled"
                                        flagMan = "checked"
                                    Else
                                        If bIsAuto Then
                                            flagAuto = "checked"
                                            flagMan = ""
                                        Else
                                            flagAuto = ""
                                            flagMan = "checked"
                                        End if
                                    End if
                               %>
                            <td>Version Number Assignment<%=Quick_Help("ChangeType")%></td>
                            <td>
                                <input name="version_type" id="version_type_A" type="radio" value="A" <%=flagAuto%> onclick="changeToAutoVersionNumberAssignment();"> Auto
                                <input name="version_type" id="version_type_M" type="radio" value="M" <%=flagMan%> onclick="changeToManualVersionNumberAssignment();"> Manual
                            </td>
                         </tr>

                         <!-- New Version Number -->
                         <tr>
                            <td>New Version Number</td>
                            <td nowrap>
                                <span>
                                    <input type="text" id="FRvnumber"
                                            name="FRvnumber"
                                             size="12" onBlur="checkVersionNumber()">
                                            <span id="vnError"></span>
                                   <%If NOT newPackage> 0 Then%>
                                      <button type="button" style="visibility:hidden" id="FRuseVersion" class="form_item" onclick="useVersion();">&#8656;&nbsp;Copy</button>
                                      <select id="FRpkgver"  name="FRpkgver" class="form_item"  onchange="updateCopyButton()";>
                                         <option value=""></option>
                                         <%
                                         Set rsLatest = OraDatabase.DbCreateDynaset( Get_Latest_All_Ext( objPkgInfo.Item("pkg_id"), parPv_id ), cint(0))

                                         If rsLatest.RecordCount> 0 Then
                                            aVersions = rsLatest.GetRows()
                                            lastRow = UBound( aVersions, 2 )
                                            Set objSortHelper = New SortHelper

                                            ' Sort versions
                                            Call objSortHelper.VersionSort( aVersions, 0, lastRow, rsLatest.FieldIndex("pkg_version") )

                                            ' Descending order
                                            For i = lastRow To 0 Step -1
                                            %>
                                               <option value="<%=aVersions( rsLatest.FieldIndex("pkg_version"), i )%>" <%=aVersions( rsLatest.FieldIndex("selected"), i )%>>
                                                  <%If aVersions( rsLatest.FieldIndex("dlocked"), i ) = "Y" Then%>
                                                     R&nbsp;
                                                  <%Else%>
                                                     &nbsp;&nbsp;&nbsp;&nbsp;
                                                  <%End If%>
                                                  <%=aVersions( rsLatest.FieldIndex("pkg_version"), i )%>
                                               </option>
                                            <%
                                            Next
                                            Set objSortHelper = nothing

                                         End If
                                         %>
                                      </select>&nbsp;Existing Versions<%=Quick_Help("Existing")%>
                                   <%End If%>
                                   </span>
                            </td>
                         </tr>
                         <tr>
                            <td>Version Extension</td>
                            <td>
                               <DIV id="divVersionExt" name="divVersionExt">
                                  <select name="v_ext" id="v_ext" class="form_item" onchange="checkVersionNumber()">
                                     <%Call drawExtensionSelectBox( objPkgInfo.Item("v_ext"), true )%>
                                  </select>
                               </DIV>
                              <div id=cotsHint style="display:none">
                                  <p>The version number for a COTS package should be made up of the manufactures version number with a VIX PatchBuild number appended. 
                                     ie: '1.12-beta.0000'
                              </div>
                            </td>
                         </tr>
                         <%If NOT parRename <> "" Then%>
                         <!-- Reason For This Version -->
                         <tr>
                            <td>Reason For This Version</td>
                            <td nowrap width="100%" class="form_field">
                               <textarea name="FRreason" id="FRreason"  class="form_item" style="width: 420px; height: 150px" onBlur="checkReason()"></textarea>
                                <span id="frError"></span>
                            </td>
                         </tr>
                        <%End If%>
                        <tr id="change_type1">
                           <td nowrap>Change Type</td>
                           <td>
                              <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                 <tr>
                                    <td width="1%">
                                      <%If bPatchOnly Then majorState = "disabled" %>
                                      <input name="change_type1" type="radio" value="M" <%=majorState%>>
                                    </td>
                                    <td nowrap>
                                       <span class="form_field">Major Change</span>
                                    </td>
                                    <td>&nbsp;</td>
                                    <td>
                                       <span>A major number change indicates the contract of the package has changed in a non-backwardly compatible manner.</span>
                                    </td>
                                 </tr>
                                 <tr>
                                    <td colspan="4"><hr width="100%" size="1" noshade></td>
                                 </tr>
                                 <tr>
                                    <td width="1%">
                                      <%If bPatchOnly Then minorState = "disabled" %>
                                      <input name="change_type1" type="radio" value="N" <%=minorState%>>
                                    </td>
                                    <td align="center" nowrap>
                                       <span class="form_field">Minor Change</span>
                                    </td>
                                    <td>&nbsp;</td>
                                    <td>
                                       <span>A minor number change indicates the contract of the package has changed in a backwardly compatible manner.</span>
                                    </td>
                                 </tr>
                                 <tr>
                                    <td colspan="4"><hr width="100%" size="1" noshade></td>
                                 </tr>
                                 <tr>
                                    <td width="1%">
                                       <input name="change_type1" type="radio" value="P" <%=patchState%>>
                                    </td>
                                    <td nowrap>
                                       <span class="form_field">Patch Change</span>
                                    </td>
                                    <td>&nbsp;</td>
                                    <td>
                                       <span>A patch number change indicates the package has changed internally.</span>
                                    </td>
                                 </tr>
                              </table>

                           </td>
                        </tr>
                         <input type="hidden" name="change_type" id="change_type" value="X">
                         <input type="hidden" name="build_type" id="build_type" value="A">
                         <input type="hidden" name="FRnewver" id="FRnewver" value="hello">
                         <input type="hidden" name="OLDpv_id" value="<%=parPv_id%>">
                         <input type="hidden" name="rtag_id" value="<%=parRtag_id%>">
                         <input type="hidden" name="newPackage" value="<%=newPackage%>">
                         <input type="hidden" name="renamePackage" value="<%=bCanRenamePackage%>">
                         <input type="hidden" id="FRpkgId" name="FRpkgId" value="<%=parPkgId%>">
                         <%If NOT ((newPackage> 0) OR bCanRenamePackage> 0) Then %>
                         <input type="hidden" id="FRpkgName" name="FRpkgName" value="<%=parPkgName%>">
                         <%End If%>

                      </table>
<%If not isNull(parPv_id) Then
                    Get_Newer_Versions
                    If bNewerVersions Then%>
                    <div class='textPanel warningPanel'>
                        <img src="images/i_warning.gif" width="16" height="16">
                         Newer versions of this package exist. Considerations:
                        <select class=fright><%=sNewerVersionsOptions%></select>
                         <ul>
                             <li>Use the latest version instead</li>
                             <li>Branch the current version</li>
                             <li>Base the 'new' version on the latest version</li>
                         </ul>
                    </div>
                   <%End If
End If%>
                    <div class=buttonPanelWhite>
                      <span id="ProgressBar" name="ProgressBar" style="visibility:hidden;"><img src="images/i_processing.gif" width="11" height="17" align="absmiddle" hspace="3">Processing...</span>
                      <input type="submit" name="btn" value="Submit" class="form_btn" onClick="return validateFormNEWversion();">
                      <input type="reset" name="btn" value="Cancel" class="form_btn" onClick="Dependency();">
                    </div>
                    <div class='textPanel err_alert'>
                        <span id="eMessage">ERROR: Page Java script did not load</span>
                 </form>
              </table>
              <!-- END Body-->
            </tr>
         </div>
      </td>
   </tr>
</table>