<%@ Language=VBScript %>
<%  Option Explicit	  %>
<%
	'-------------------------------------------------------------------------
	' quota_quota.asp: manage default quotas on the volume
	'
	' Copyright (c) Microsoft Corporation.  All rights reserved.
	'
	' Date			Description
	' 17-Jan-01		Creation date
	' 15-Mar-01     Ported to 2.0
	'-------------------------------------------------------------------------
%>
	<!-- #include virtual = "/admin/inc_framework.asp" -->
	<!-- #include file="loc_quotas.asp" -->
	<!-- #include file="inc_quotas.asp" -->
<%
	'-------------------------------------------------------------------------
	' Global Variables
	'-------------------------------------------------------------------------
	Dim G_nRadioChecked	 ' to set radioButton values - contains 1 or 2 only

	Dim SOURCE_FILE      ' the source file name used while Tracing
	SOURCE_FILE = SA_GetScriptFileName()

	'-------------------------------------------------------------------------
	' Global Constants
	'-------------------------------------------------------------------------
	Const CONST_ENABLE_QUOTA_MGMT   = 1 ' Enable quota management
	Const CONST_DISABLE_QUOTA_MGMT  = 0 ' Disable quota management
	Const CONST_ENFORCE_QUOTA_LIMIT = 2 ' Deny DiskSpace if user exceeds limit

	'-------------------------------------------------------------------------
	' Global Form Variables
	'-------------------------------------------------------------------------
	Dim F_strVolName           ' Volume Name
	Dim F_nChkEnableQuotaMgmt  ' set disk management state checkBox
	Dim F_blnChkDenyDiskSpace  ' Enable deny disk space checkBox
	Dim F_blnChkEnableLogEventExceedQuotaLimit ' Log if user exceeds quota limit checkBox
	Dim F_blnChkEnableLogEventExceedWarningLimit ' Log if user exceeds warning limit checkBox
	Dim F_LimitSize			' Disk limit size - textBox value
	Dim F_LimitUnits		' Disk limit size units  - comboBox value
	Dim F_ThresholdSize		' Warning level set for the user - textBox value
	Dim F_ThresholdUnits	' WarningLimit Uunits for the warning level set - comboBox Value

	'======================================================
	' Entry point
	'======================================================
	Dim page
	DIM L_PAGETITLE_QUOTA_QUOTA_TEXT

	' get the volumename to append to title
	Call getVolumeName()

	' append the volume name to the title
	Dim arrVarReplacementStrings(2)
	arrVarReplacementStrings(0) = getVolumeLabelForDrive(F_strVolName)
	arrVarReplacementStrings(1) = F_strVolName

	' append the volume name to the title
	L_PAGETITLE_QUOTA_QUOTA_TEXT = SA_GetLocString("diskmsg.dll", "403E0047", arrVarReplacementStrings)

	Dim aPageTitle(2)

	aPageTitle(0) = L_BROWSERCAPTION_DEFAULTQUOTA_TEXT
	aPageTitle(1) = L_PAGETITLE_QUOTA_QUOTA_TEXT

	'
	' Create a Property Page
	Call SA_CreatePage( aPageTitle, "", PT_PROPERTY, page )
	
	'
	' Serve the page
	Call SA_ShowPage( page )

	'======================================================
	' Web Framework Event Handlers
	'======================================================
	
	'---------------------------------------------------------------------
	' Function name:    OnInitPage
	' Description:      Called to signal first time processing for this page
	' Input Variables:  Out: PageIn 
	'                   Out: EventArg
	' Output Variables:	None
	' Return Values:    TRUE to indicate initialization was successful.
	'                   FALSE to indicate errors. Returning FALSE will 
	'                   cause the page to be abandoned.
	' Global Variables: None
	' Functions Called: getValuesForDefault
	'
	' Get ALL the initial form field settings
	'---------------------------------------------------------------------
	Public Function OnInitPage(ByRef PageIn, ByRef EventArg)
		Call SA_TraceOut(SOURCE_FILE, "OnInitPage")
		
		' Call the function to get the default values
		OnInitPage = getValuesForDefault      ' True /False
	End Function
	
	'---------------------------------------------------------------------
	' Function name:    OnServePropertyPage
	' Description:      Called when the page needs to be served 
	' Input Variables:	Out: PageIn 
	'                   Out: EventArg
	' Output Variables:	None
	' Return Values:    TRUE to indicate no problems occured. FALSE to 
	'                   indicate errors. Returning FALSE will cause the 
	'                   page to be abandoned.
	' Global Variables: In: F_(*) - Form field values
	'                   In: L_(*) - Text display strings
	'                   In: G_nRadioChecked - radio to be selected
	' Functions Called: (i)ServeCommonJavaScript, (ii)setUnits
	'
	' The UI is served here.
	'---------------------------------------------------------------------
	Public Function OnServePropertyPage(ByRef PageIn, ByRef EventArg)
		Call SA_TraceOut(SOURCE_FILE, "OnServePropertyPage")
		
		'
		' Emit Javascript functions required by Web Framework
		Call ServeCommonJavaScript()

%>
	<table border="0" cellspacing="0" cellpadding="0">
		<tr>
			<td nowrap colspan="2" class="TasksBody">
				<input type="checkbox" class="FormCheckBox" name="chkEnableQuotaMgmt" onClick="JavaScript:CheckToDisableAll(); "  <% If F_nChkEnableQuotaMgmt <> CONST_DISABLE_QUOTA_MGMT Then Response.write "CHECKED" Else Response.Write "UNCHECKED" End If %> >
				&nbsp;<%=L_ENABLE_QUOTA_MGMT_TEXT %>
			</td>
		</tr>
	
		<tr>
			<td nowrap colspan="2" class="TasksBody">
				<input type="checkbox" class="FormCheckBox" name="chkDenyDiskSpace" <% If F_blnChkDenyDiskSpace Then Response.write "CHECKED" Else Response.Write "UNCHECKED" End If %>  >
				&nbsp;<%=L_DENY_DISK_SPACE_TEXT	%>
			</td>
		</tr>
		<tr>
			<td colspan="2" class="TasksBody">&nbsp;</td>
		</tr>

		<tr>
			<td colspan="2" nowrap class="TasksBody">
				<%=L_SELECT_DEFAULT_QUOTA_TEXT	%>
			</td>
		</tr>
		<tr>
			<td colspan="2" class="TasksBody">&nbsp;</td>
		</tr>

		<tr>
			<td colspan="2" nowrap class="TasksBody">
				<p><input type="radio" class="FormRadioButton" name="donotlimit" value="1" <%  If G_nRadioChecked = 1 Then Response.Write "CHECKED" Else Response.write "UNCHECKED" End If %> onClick="JavaScript:DisableWarnLevel(warndisksize, warndisksizeunits); DisableLimitLevel(limitdisksize, limitdisksizeunits)">&nbsp;<% =L_DONOTLIMITDISKUSAGE_TEXT %></p>
			</td>
		</tr>
		<tr>		
			<td width="30%" nowrap class="TasksBody">
				<input type="radio" class="FormRadioButton" name="donotlimit" value="2" <% If G_nRadioChecked = 2 Then Response.Write "CHECKED" Else Response.write "UNCHECKED" End If %> onClick="JavaScript:EnableWarnDiskSpace(warndisksize,warndisksizeunits); EnableLimitDiskSpace(limitdisksize, limitdisksizeunits) ">&nbsp;<% =L_SETLIMITDISKSPACE_TEXT %>
			</td>
			<td nowrap class="TasksBody">
				<input type="text" name="limitdisksize" value="<% =server.HTMLEncode(SA_EscapeQuotes(F_LimitSize)) %>" size="14" maxlength = "11" class="FormField" onFocus="this.select()" onKeyPress="allownumbers( this )" onChange="validatedisklimit( this, document.frmTask.limitdisksizeunits.value)" >
				<select name="limitdisksizeunits" size="1" class="FormField" onChange="ClearErr();validatedisklimit( document.frmTask.limitdisksize, this.value )">
						<%	setUnits(F_LimitUnits)	%>		
				</select>
			</td>
		</tr>
		<tr>
			<td width="30%" nowrap class="TasksBody">
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<% =L_SETWARNINGLEVEL_TEXT %>
			</td>
			<td nowrap class="TasksBody">	
				<input type="text" name="warndisksize" value="<%=server.HTMLEncode(SA_EscapeQuotes(F_ThresholdSize)) %>" size="14" maxlength="11" class="FormField" onFocus="this.select()" onKeyPress="allownumbers( this )" onChange="validatedisklimit( this, document.frmTask.warndisksizeunits.value )" >
				
				<select name="warndisksizeunits" size="1" class="FormField" onChange="ClearErr();validatedisklimit(document.frmTask.warndisksize, this.value)">
						<%	setUnits(F_ThresholdUnits)	%>
				</select>
			</td>
		</tr>
		<tr>
			<td colspan="2" class="TasksBody">&nbsp;</td>
		</tr>

		<tr>
			<td colspan="2" nowrap class="TasksBody">
				<%=L_SELECT_QUOTA_LOGGING_TEXT	%>
			</td>
		</tr>
		<tr>
			<td nowrap colspan="2" class="TasksBody">
				<input type="checkbox" class="FormCheckBox" name="chkEnableLogEventExceedQuotaLimit" <% If F_blnChkEnableLogEventExceedQuotaLimit Then Response.write "CHECKED" Else Response.Write "UNCHECKED" End If %> >
				&nbsp;<%=L_ENABLE_QUOTA_LOGGING_TEXT	%>
			</td>
		</tr>
		<tr>
			<td nowrap colspan="2" class="TasksBody">
				<input type="checkbox" class="FormCheckBox" name="chkEnableLogEventExceedWarningLimit" <% If F_blnChkEnableLogEventExceedWarningLimit Then Response.write "CHECKED" Else Response.Write "UNCHECKED" End If %> >
				&nbsp;<%=L_ENABLE_WARNING_LOGGING_TEXT	%>
			</td>
		</tr>
	</table>

	<input name="volume" type="hidden"  value="<% =F_strVolName %>">

<%
		OnServePropertyPage = TRUE
	End Function

	'---------------------------------------------------------------------
	' Function name:	OnPostBackPage
	' Description:		Called to signal that the page has been posted-back
	' Input Variables:	Out: PageIn 
	'                   Out: EventArg
	' Output Variables:	None
	' Return Values:	TRUE to indicate success. FALSE to indicate errors.
	'                   Returning FALSE will cause the page to be abandoned.
	' Global Variables: Out: F_(*) - Form values
	'                   Out: G_nRadioChecked - the selected radio value
	'
	' Collect the form data vales.
	'---------------------------------------------------------------------
	Public Function OnPostBackPage(ByRef PageIn, ByRef EventArg)
		Call SA_TraceOut(SOURCE_FILE, "OnPostBackPage")

		' get the volume for which quota is set
		F_strVolName = Request.Form("volume")

		' initialize the quota state to "Disabled"
		F_nChkEnableQuotaMgmt = CONST_DISABLE_QUOTA_MGMT
		If UCASE(Request.Form("chkEnableQuotaMgmt")) = "ON" Then
			' If the checkBox is Checked, Enable the Quota State
			F_nChkEnableQuotaMgmt =  CONST_ENABLE_QUOTA_MGMT
		End If

		' initialize the "Enforce Quota Limit" to false
		F_blnChkDenyDiskSpace = False
		If  UCASE(Request.Form("chkDenyDiskSpace")) = "ON" Then
			' If the checkBox is checked, set to true
			F_blnChkDenyDiskSpace = True
		End if

		' initialize the "Log when user exceeds Quota limit" to false
		F_blnChkEnableLogEventExceedQuotaLimit = False
		If UCASE(Request.Form("chkEnableLogEventExceedQuotaLimit")) = "ON" Then
			' If checkBox is checked, Enable the logging
			F_blnChkEnableLogEventExceedQuotaLimit = True
		End if

		' initialize the "Log if user exceeds WarningLimit" to false
		F_blnChkEnableLogEventExceedWarningLimit = False
		If  UCASE(Request.Form("chkEnableLogEventExceedWarningLimit")) = "ON" Then
			' if the checkBox is checked, Enable the logging
			F_blnChkEnableLogEventExceedWarningLimit = True
		End if

		' get the selected radioButton value
		G_nRadioChecked = Request.Form("donotlimit")

		' get the Disk Limit Size and its Units
		F_LimitSize  = Request.Form("limitdisksize")
		F_LimitUnits = Request.Form("limitdisksizeunits")
		
		' get the Warning Limit Size and its Units
		F_ThresholdSize	 = Request.Form("warndisksize")
		F_ThresholdUnits = Request.Form("warndisksizeunits")
	
		If Len(Trim(F_strVolName)) = 0 Then
			' volume is not retrieved. cannot proceed.
			OnPostBackPage = False
		Else
			' return True
			OnPostBackPage = TRUE
		End If

	End Function

	'---------------------------------------------------------------------
	' Function name:	OnSubmitPage
	' Description:		To process the submit request
	' Input Variables:	Out: PageIn
	'                   Out: EventArg
	' Output Variables:	None
	' Return Values:	TRUE if the submit was successful, FALSE to indicate error(s).
	'                   Returning FALSE will cause the page to be served again using
	'                   a call to OnServePropertyPage.
	'					Returning FALSE will display error message.
	' Global Variables: None
	' Functions Called: UpdateQuotaValues
	'
	' Updates the Quota Values for the given volume
	'---------------------------------------------------------------------
	Public Function OnSubmitPage(ByRef PageIn, ByRef EventArg)
		Call SA_TraceOut(SOURCE_FILE, "OnSubmitPage")

		' Call UpdateQuotaValues to update the values.
		' If any error occurs,the error message is set in the function.
		OnSubmitPage = UpdateQuotaValues    ' returns: True/False

	End Function

	'---------------------------------------------------------------------
	' Function name:	OnClosePage
	' Description:		to perform clean-up processing
	' Input Variables:	Out: PageIn
	'                   Out: EventArg
	' Output Variables:	None
	' Return Values:	TRUE to allow close, FALSE to prevent close. Returning FALSE
	'                   will result in a call to OnServePropertyPage.
	' Global Variables: None
	'
	' Called when the page is about to be closed.
	'---------------------------------------------------------------------
	Public Function OnClosePage(ByRef PageIn, ByRef EventArg)
		Call SA_TraceOut(SOURCE_FILE, "OnClosePage")
		
		' no processing required here. Return True
		OnClosePage = TRUE
	End Function

	'======================================================
	' Private Functions
	'======================================================
	
	'---------------------------------------------------------------------
	' Function name:	ServeCommonJavaScript
	' Description:		Serve JavaScript that is required for this page type
	' Input Variables:	None
	' Output Variables:	None
	' Return Values:	None
	' Global Variables: L_(*) - Error messages displayed on the client side
	'
	' This contains the Client-Side script required for the page.
	'---------------------------------------------------------------------
	Function ServeCommonJavaScript()
	%>
		<script language="JavaScript" src="<%=m_VirtualRoot%>inc_global.js">
		</script>
		<script language="JavaScript" src="inc_quotas.js">
		</script>
		
		<script language="JavaScript">
		//
		// Microsoft Server Appliance Web Framework Support Functions
		// Copyright (c) Microsoft Corporation.  All rights reserved.
		//

		// to perform first time initialization. 
		function Init()
		{
			// enable cancel in case of any server side error  
			EnableCancel();
			if(document.frmTask.chkEnableQuotaMgmt.checked == false)
			{
				// to disable all other controls if Quota Management is disabled
				disableFields();
				return;
			}
			if ( document.frmTask.donotlimit[0].checked )
			{
				document.frmTask.warndisksize.disabled          = true;
				document.frmTask.limitdisksize.disabled         = true;
				document.frmTask.warndisksizeunits.disabled     = true;
				document.frmTask.limitdisksizeunits.disabled    = true;
			}
			else
			{
				if ( document.frmTask.donotlimit[1].checked )
				{
					document.frmTask.limitdisksize.select();
				}	
				else
				{
					// disable all except cancel button
					DisableOK() ;
					document.frmTask.donotlimit[0].disabled         = true;
					document.frmTask.donotlimit[1].disabled         = true;
					document.frmTask.warndisksize.disabled          = true;
					document.frmTask.limitdisksize.disabled         = true;
					document.frmTask.warndisksizeunits.disabled     = true;
					document.frmTask.limitdisksizeunits.disabled    = true;
					document.frmTask.donotlimit[0].checked			= false;
				}
			}
		}
		
	    // to validate user input. Returning false will cause the submit to abort. 
	    // Returns: True if the page is OK, false if error(s) exist. 
		function ValidatePage()
		{
			var objlimitSize  = document.frmTask.limitdisksize ;
			var objwarnSize	  = document.frmTask.warndisksize ;
			var objlimitUnits = document.frmTask.limitdisksizeunits ;
			var objwarnUnits  = document.frmTask.warndisksizeunits ;

			if ( document.frmTask.donotlimit[1].checked )
			{
				// validate the Limit Size value
				if(!isSizeValidDataType(objlimitSize.value) )
				{
					SA_DisplayErr('<% =Server.HTMLEncode(SA_EscapeQuotes(L_INVALIDDATATYPE_ERRORMESSAGE))%>');
					document.frmTask.onkeypress = ClearErr;
					selectFocus( objlimitSize );
					return false;
				}

				// validate the LimitSize Units
				if (!checkSizeAndUnits(objlimitSize.value, objlimitUnits.value) )
				{
					SA_DisplayErr('<%=Server.HTMLEncode(SA_EscapeQuotes(L_SIZEOUTOFBOUND_ERRORMESSAGE))%>');
					document.frmTask.onkeypress = ClearErr;
					selectFocus( objlimitSize );
					return false;
				} 

				// validate the Warning Limit
				if(!isSizeValidDataType(objwarnSize.value) )
				{
					SA_DisplayErr('<%=Server.HTMLEncode(SA_EscapeQuotes(L_INVALIDDATATYPE_ERRORMESSAGE))%>');
					document.frmTask.onkeypress = ClearErr;
					selectFocus(objwarnSize);
					return false;
				}

				// validate the Warning Limit Units
				if (!checkSizeAndUnits(objwarnSize.value, objwarnUnits.value) )
				{
					SA_DisplayErr('<%=Server.HTMLEncode(SA_EscapeQuotes(L_SIZEOUTOFBOUND_ERRORMESSAGE)) %>');
					document.frmTask.onkeypress = ClearErr;
					selectFocus( objwarnSize );
					return false;
				} 
				
				// verify the warning level. Must be less than limit.
				if(isWarningMoreThanLimit(objlimitSize,objlimitUnits,objwarnSize,objwarnUnits))
				{
					SA_DisplayErr('<%=Server.HTMLEncode(SA_EscapeQuotes(L_WARNING_MORETHAN_LIMIT_ERRORMESSAGE))%>');
					document.frmTask.onkeypress = ClearErr;
					selectFocus( objwarnSize );
					return false;
				}
			}
			
			// if the Limit values are Less than 1 KB, set them to 1 KB
			validatedisklimit( objlimitSize, objlimitUnits.value);
			validatedisklimit( objwarnSize, objwarnUnits.value);

			return true;
		}
		
		// to modify hidden form fields
		function SetData()
		{
			// no hidden values to update here
		}

		// to enable or disable the form controls onClick of the CheckBox
		function CheckToDisableAll()
		{
			// If Disk quota mgmt is disabled we need to disable all fields
			if ( document.frmTask.chkEnableQuotaMgmt.checked == false )
			{
				// disable the fields
				disableFields();
			}
			else
			{
				// Disk quota mgmt is enabled we need to enable all fields
				enableFields();
			}	
		}

		// to disable the fields
		function disableFields()
		{
			document.frmTask.chkDenyDiskSpace.checked = false;
			document.frmTask.chkDenyDiskSpace.disabled = true;

			document.frmTask.donotlimit[0].checked  = true;
			document.frmTask.donotlimit[0].disabled  = true;
			document.frmTask.donotlimit[1].disabled  = true;

			document.frmTask.chkEnableLogEventExceedQuotaLimit.checked = false;
			document.frmTask.chkEnableLogEventExceedQuotaLimit.disabled = true;

			document.frmTask.chkEnableLogEventExceedWarningLimit.checked = false;
			document.frmTask.chkEnableLogEventExceedWarningLimit.disabled = true;

			document.frmTask.warndisksize.disabled = true;
			document.frmTask.warndisksizeunits.disabled = true;
				
			document.frmTask.limitdisksize.disabled = true;
			document.frmTask.limitdisksizeunits.disabled = true;
		}	

		// to enable the fields
		function enableFields()
		{
			document.frmTask.chkDenyDiskSpace.checked = false;
			document.frmTask.chkDenyDiskSpace.disabled = false;

			document.frmTask.donotlimit[1].checked = true;
			document.frmTask.donotlimit[0].disabled = false;
			document.frmTask.donotlimit[1].disabled = false;

			if( isNaN(document.frmTask.limitdisksize.value) )
				document.frmTask.limitdisksize.value = "1" ;

			if( isNaN(document.frmTask.warndisksize.value) )
				document.frmTask.warndisksize.value = "1" ;

			document.frmTask.chkEnableLogEventExceedQuotaLimit.checked = false;
			document.frmTask.chkEnableLogEventExceedQuotaLimit.disabled = false;

			document.frmTask.chkEnableLogEventExceedWarningLimit.checked = false;
			document.frmTask.chkEnableLogEventExceedWarningLimit.disabled = false;

			document.frmTask.warndisksize.disabled = false;
			document.frmTask.warndisksizeunits.disabled = false;
				
			document.frmTask.limitdisksize.disabled = false;
			document.frmTask.limitdisksizeunits.disabled = false;
		}
		
	</script>

	<%
	End Function

	'---------------------------------------------------------------------
	' Function name:	getValuesForDefault
	' Description:		get the default values for the quota settings
	' Input Variables:	None
	' Output Variables:	None
	' Return Values:	True - if success. False if any error(s) occur
	' Global Variables: Out: F_(*) - Form field values
	'                   Out: G_nRadioChecked - radioButton to select
	'                   In:  L_(*) - Error messages
	' Functions Called: 
    '  (i)getQuotaLimitRadioForDefault  (iv)getThresholdSizeForDefault
    ' (ii)getLimitSizeForDefault         (v)getThresholdSizeUnitsForDefault
    '(iii)getLimitUnitsForDefault
    '
	' Calls the failure page if values could not be retrieved
	'---------------------------------------------------------------------
	Function getValuesForDefault
		On Error Resume Next
		Err.Clear

		Dim  objQuotas    ' the quota object

		' create the quota object and initialize for the required Volume
		Set objQuotas = CreateObject("Microsoft.DiskQuota.1")			
		objQuotas.Initialize F_strVolName &"\", 1
		If Err.number <> 0 Then
			' cannot proceed. Display failure page.
			Call SA_ServeFailurePage(L_OBJECTNOTCREATED_ERRORMESSAGE)		
		End If

		' get the Quota Management State. Possible values: 
		'     (i)CONST_ENABLE_QUOTA_MGMT   - Enable Quota Management
		'    (ii)CONST_ENFORCE_QUOTA_LIMIT - Disable Quota Mangement
		'   (iii)CONST_DISABLE_QUOTA_MGMT  - Enforce Quota Management
		F_nChkEnableQuotaMgmt = objQuotas.QuotaState
		
		' initialize the "Enforce Quota Management" to False
		F_blnChkDenyDiskSpace = False
		If objQuotas.QuotaState = CONST_ENFORCE_QUOTA_LIMIT Then
			' set to True if enforced
			F_blnChkDenyDiskSpace   = True
		End If

		' get the "Log if user exceeds quota limit" value. True or False
		F_blnChkEnableLogEventExceedQuotaLimit = objQuotas.LogQuotaLimit
		
		' get the "Log if user exceeds Warning limit" value. True or False
		F_blnChkEnableLogEventExceedWarningLimit = objQuotas.LogQuotaThreshold
		
		' get the radio button to be selected - 1 or 2
		G_nRadioChecked = getQuotaLimitRadioForDefault(objQuotas)

		' Compute Default Disk Limit and its units
		F_LimitSize  = getLimitSizeForDefault(objQuotas)
		F_LimitUnits = getLimitUnitsForDefault(objQuotas)

		' Compute Default Warning Limit and its units
		F_ThresholdSize  = getThresholdSizeForDefault(objQuotas)
		F_ThresholdUnits = getThresholdSizeUnitsForDefault(objQuotas)

		If Err.number <> 0 Then
			' in case of any error return False
			getValuesForDefault = False
			Err.Clear ' stop further error propagation
			Exit Function
		End If

		getValuesForDefault = True
		
		' clean up
		Set objQuotas = Nothing

	End Function

	'---------------------------------------------------------------------
	' Function name:	UpdateQuotaValues
	' Description:		Set the default values for the quota settings
	' Input Variables:	None
	' Output Variables:	None
	' Return Values:	True - if success. False if any error(s) occur
	' Global Variables: In: F_(*) - Form field values
	'                   In: L_(*) - Error messages
	'                   In: G_nRadioChecked - radioButton to select
	' Functions Called: (i)setDefaultQuotaLimit, (ii)setDefaultThreshold
	'
	' The error message is set incase error occurs
	'---------------------------------------------------------------------
	Function UpdateQuotaValues
		On Error Resume Next
		Err.Clear 

		Dim  objQuotas      ' the quota object

		' create the quota object and initialize for the required Volume
		Set objQuotas = CreateObject("Microsoft.DiskQuota.1")
		objQuotas.Initialize F_strVolName &"\", 1
		If Err.number <> 0 Then
			' cannot proceed. Display failure page.
			Call SA_ServeFailurePage(L_OBJECTNOTCREATED_ERRORMESSAGE)		
		End If

		' update the Quota State property
		objQuotas.QuotaState = 	F_nChkEnableQuotaMgmt

		' update the "Enforce Quota Limit" property
		If F_blnChkDenyDiskSpace Then
			objQuotas.QuotaState = 	CONST_ENFORCE_QUOTA_LIMIT
		End if

		' update "Enable Logging when user exceeds disk limit"
		objQuotas.LogQuotaLimit  = 	F_blnChkEnableLogEventExceedQuotaLimit

		' enable logging when user exceeds warning limit
		objQuotas.LogQuotaThreshold  = 	F_blnChkEnableLogEventExceedWarningLimit

		' check if any error occured
		If Err.number <> 0 Then	
			SA_SetErrMsg L_QUOTA_UPDATE_FAIL_ERRORMESSAGE & " (" & Hex(Err.Number) & ")"
			Err.Clear  ' stop further propagation
			UpdateQuotaValues = False
			Exit Function
		End If

		' If "Do not limit disk usage" is selected, Set the DiskLimit and
		' WarningLimit to "No Limit"
		If CInt(G_nRadioChecked) = CInt(CONST_RADIO_DONOT_LIMIT_DISKUSAGE) Then
			F_LimitSize = CONST_NO_LIMIT
			F_ThresholdSize = CONST_NO_LIMIT
		End If

		' set the DiskLimit size for the Quota
		If NOT setDefaultQuotaLimit(objQuotas, F_LimitSize, F_LimitUnits) Then
			SA_SetErrMsg L_MAXLIMITNOTSET_ERRORMESSAGE & " (" & Hex(Err.Number) & ")" 
			Err.Clear   ' stop further propagation
			UpdateQuotaValues = False
			Exit Function
		End If 
		
		' set the WarningLimit size for the Quota
		If NOT setDefaultThreshold(objQuotas, F_ThresholdSize, F_ThresholdUnits) Then
			SA_SetErrMsg L_WARNINGLIMITNOTSET_ERRORMESSAGE & " (" & Hex(Err.Number) & ")"
			Err.Clear   ' stop further propagation
			UpdateQuotaValues = False
			Exit Function
		End If 

		' all values updated. return True
		UpdateQuotaValues = True

		' clean up
		Set objQuotas = Nothing

	End Function

	'---------------------------------------------------------------------
	' Function name:	setDefaultQuotaLimit
	' Description:		set the Default Quota limit
	' Input Variables:	(out)objQuotas
	'                   (in) nDiskLimit
	'                   (in) strUnits
	' Output Variables:	(out) objQuotas
	' Return Values:	True/ False
	' Global Variables: None
	' Functions Called: ChangeToFloat
	'---------------------------------------------------------------------
	Function setDefaultQuotaLimit(ByRef objQuotas, nDiskLimit, strUnits)
		On Error Resume Next
		Err.Clear 

		Dim nDiskLimitToSet  ' the disk limit to set
			
		If nDiskLimit <> CONST_NO_LIMIT Then
			'Added 0.001 round the value of disk Limit
			nDiskLimitToSet = ChangeToFloat(nDiskLimit + 0.001, strUnits)
			If nDiskLimitToSet < 1024 Then
				nDiskLimitToSet = 1024    ' must be minimum 1 KB
			End if
		Else
			nDiskLimitToSet = nDiskLimit
		End If	

		' the disk values are converted to Bytes and then set to the object
		objQuotas.DefaultQuotaLimit = nDiskLimitToSet
			
		If Err.number <> 0 Then
			setDefaultQuotaLimit = FALSE
		Else
			setDefaultQuotaLimit = TRUE
		End If	

	End Function

	'---------------------------------------------------------------------
	' Function name:	setDefaultThreshold
	' Description:		set the Default Quota Threshold 
	' Input Variables:	(out)objQuotas
	'                   (in) nThresholdLimit
	'                   (in) strUnits
	' Output Variables:	(out) objQuotas
	' Return Values:	True/ False
	' Global Variables: None
	' Functions Called: ChangeToFloat
	'---------------------------------------------------------------------
	Function setDefaultThreshold(ByRef objQuotas, nThresholdLimit, strUnits)
		On Error Resume Next
		Err.Clear 

		Dim nThresholdLimitToSet     ' the warning limit to set

		If nThresholdLimit <> CONST_NO_LIMIT Then
			'Added 0.001 round the value of Warning Limit				
			nThresholdLimitToSet = ChangeToFloat( nThresholdLimit + 0.001, strUnits )
			If nThresholdLimitToSet < 1024 Then
				nThresholdLimitToSet = 1024     ' must be minimum 1 KB
			End if
		Else
			nThresholdLimitToSet = nThresholdLimit
		End If			

		' convert the value into Bytes abd set to object
		objQuotas.DefaultQuotaThreshold = nThresholdLimitToSet

		If Err.number <> 0 Then
			setDefaultThreshold = False
		Else
			setDefaultThreshold = True
		End If

	End Function
	
	'---------------------------------------------------------------------
	' Procedure name:	getVolumeName
	' Description:		get volume name as obtained from previous OTS page
	' Input Variables:	None
	' Output Variables:	None
	' Return Values:	None
	' Global Variables: Out: F_strVolName - the volume to set quota values on
	'---------------------------------------------------------------------
	Sub getVolumeName()

		Dim strItemKey   ' the selected value in the OTS page
		Dim i            ' to loop
		Dim iCount       ' the count of entries selected
		
		' first get from the form (in case form re-submitted)
		F_strVolName = Request.Form("volume")
		If Len(Trim(F_strVolName)) = 0 Then
			' get the selected value from the OTS
			iCount = OTS_GetTableSelectionCount("")
			For i = 1 to iCount
				Call OTS_GetTableSelection("", i, strItemKey)
			Next
			' get the last selected entry
			F_strVolName = strItemKey
		End If	

	End Sub

%>