﻿// Scaling option dialog code

var SO_MULTIPLY = 1;
var SO_DIVIDE = 2;
var SO_ADD = 3;
var SO_SUBTRACT = 4;

var M_dMaxAbsoluteScalingFactor = 1E100;

var M_strScalingOptions = 
      "<TABLE class='OptionTable' border=0 width='100%' cellPadding='3' cellSpacing='0'>"
+     "<TR><TD>"
+     "<TABLE cellPadding='3' cellSpacing='0'>"
+     "<TR>"
+     "<td class=OptionHeader nowrap align=left>"
+     resScaleValues
+     "</td>"
+     "</TR>"
+     "<TR height='3'>"
+     "</TR>"
+     "</TABLE>"
+     "</TD></TR>"
+     "<TR><TD>"
+     "<TABLE border=0 cellPadding='3' cellSpacing='0'>"
+     "<tr>"
+     "<th width='10'></th>"
+     "<td class=OptionItem nowrap>"
+     "<Label for='ScalingMeasures' "
+     " onclick=\"javascript:switchScalingMeasure();\""
+     ">" + resMeasure + "</Label>"
+     "</td><td>"
+     "<select class=Default id='ScalingMeasures' title='" + resMeasure + "' name='ScalingMeasures' "
+     "onkeyup='javascript:switchScalingMeasure()' "
+     "onkeypress='javascript:SubmitScaling(event);' "
+     "onchange='javascript:switchScalingMeasure()'>"
+     "</select>"
+     "</td>"
+     "<th width='10'></th></tr>"
+     "<tr>"
+     "<th width='10'></th>"
+     "<td class=OptionItem nowrap>"
+     "<Label for='ScalingOperator' ACCESSKEY='o' >" + resScalingOperator + "</Label>"
+     "</td><td>"
+     "<select class=Default id='ScalingOperator' title='" + resMeasure + "' name='ScalingOperator'                                                                                                      "
+     "onkeypress='javascript:SubmitScaling(event);' >"
+     "<option selected value=" + SO_MULTIPLY.toString() + ">"
+     resMultiplyBy
+     "</option>"
+     "<option value=" + SO_DIVIDE.toString() + ">"
+     resDivideBy
+     "</option>"
+     "<option value=" + SO_ADD.toString() + ">"
+     resAdd
+     "</option>"
+     "<option value=" + SO_SUBTRACT.toString() + ">"
+     resSubtract
+     "</option>"
+     "</select>"
+     "</td>"
+     "<th width='10'></th></tr>"
+     "<tr>"
+     "<th width='10'></th>"
+     "<td class=OptionItem nowrap>"
+     "<LABEL FOR=ScalingFactorId ACCESSKEY='v'>"
+     resScalingValue
+     "</LABEL>"
+     "</td><td>"
+     "<input class=VariableTextInput type=TEXT name='ScalingFactor' " 
+     "id=ScalingFactorId size='10' " 
+     "onkeypress='javascript:return SubmitScaling(event);'>"
+     "</td>"
+     "<th width='10'></th></tr>"
+     "<th width='10'></th></tr>"
+     "<tr>"
+     "<th width='10'></th>"
+     "<td class=OptionItem nowrap>"
+     "<LABEL FOR=ScalingDecimalOptions ACCESSKEY='d'>" 
+     resNumberOfDecimals
+     "</LABEL>"
+     "</td><td>"
+     "<SELECT  class=Default id=ScalingDecimalOptions size='1'"
+     " onkeypress='javascript:SubmitScaling(event);'>"
+     "</SELECT>"
+     "</td>"
+     "<th width='10'></th>"
+     "</TR></TABLE>"
+     "</TD></TR>"
+     "<TR><TD><TABLE><TR>"
+     "<td nowrap>"
+     "<input type=button name=ScalingGo value='"
+     resOK
+     "' onclick='javascript:return OnScalingOptions();' >&nbsp;"
+     "<input type=button name=Cancel value='" 
+     resCancel
+     "' onclick='javascript:OnCancelOptions();'>&nbsp;"
+     "<input type=button name=ScalingClearAll value='" 
+     resClearAll
+     "' onclick='javascript:OnClearScaling();'>&nbsp;"
+     "<input name=DialogHelpButton type=button value=\"" + resHelp
+     "\" onclick=\"javascript:DisplayDialogHelp('Scaling.htm', '');\">"
+     "</td>"
+     "</TR></TABLE></TD></TR>"
+     "</TABLE>";

//-------------------------------------------------------------------
var M_anCurrentScalingOperators = new Array();
var M_astrCurrentScalingFactors = new Array();
var M_astrCurrentScalingDecimals = new Array();
var M_nCurrentMeasure;

//-------------------------------------------------------------------
function ShowScalingOptions()
{
	zeroScrollPosition();

   DisplayOption(M_strScalingOptions);
   InitializeScalingOptions();
   setTimeout("document.aspnetForm.ScalingFactor.focus();", 100);
	// Resize scroll bars
   onLayoutResize();
}

//-------------------------------------------------------------------
function ScalingOptionsPopulateSelect(i_objSelect, i_nOptions, i_nStep, i_nDefaultValue) {
   var nIndex;
   var nValue;
   var nSelectedIndex = 0;

   if (i_objSelect) {
      SelectControlAddOption(i_objSelect, resDefault, resDefault);
      for (nIndex = 0; nIndex < i_nOptions; nIndex++) {
         nValue = nIndex * i_nStep;
         if (nValue == i_nDefaultValue) nSelectedIndex = nIndex;
         SelectControlAddOption(i_objSelect, nValue, nValue.toString());
      }
      i_objSelect.selectedIndex = nSelectedIndex;
   }
}

//-------------------------------------------------------------------
function InitializeScalingOptions() {
   var clScalingDecimalOptions;
   var clScalingOperators;
   var nIndex;
   var nMeasure;
   var nSelectedIndex;
   
   // add the measures and scaling factors and decimals
   document.aspnetForm.ScalingMeasures.options.length = 0;

   // Decimals
   clScalingDecimalOptions = document.getElementById("ScalingDecimalOptions");
   ScalingOptionsPopulateSelect(clScalingDecimalOptions, 11, 1, M_astrCurrentScalingDecimals[M_nCurrentMeasure]);

   for (nMeasure = 0; nMeasure < M_astrScalingMeasures.length; nMeasure++) {
      SelectControlAddOption(document.aspnetForm.ScalingMeasures, 
         nMeasure, M_astrScalingMeasures[nMeasure]);
      M_astrCurrentScalingFactors[nMeasure] = M_astrScalingFactors[nMeasure];
      if (M_astrScalingDecimals[nMeasure] != "" && M_astrScalingDecimals[nMeasure] != "-1") {
         M_astrCurrentScalingDecimals[nMeasure] = M_astrScalingDecimals[nMeasure];
      }
      else  {
         M_astrCurrentScalingDecimals[nMeasure] = resDefault;
      }
      M_anCurrentScalingOperators[nMeasure] = M_anScalingOperators[nMeasure];
   }
   M_nCurrentMeasure = 0;
   document.aspnetForm.ScalingFactor.value = M_astrCurrentScalingFactors[M_nCurrentMeasure];
   nSelectedIndex = 0;
   for (nIndex = 0; nIndex < clScalingDecimalOptions.childNodes.length; nIndex++) {
      if (nIndex == M_astrCurrentScalingDecimals[M_nCurrentMeasure]) {
         nSelectedIndex = nIndex + 1;
      }
   }
   clScalingDecimalOptions.selectedIndex = nSelectedIndex;

   //Scaling operators
   nSelectedIndex = 0;
   clScalingOperators = document.getElementById("ScalingOperator");
   for (nIndex = 0; nIndex < clScalingOperators.childNodes.length; nIndex++) {
      if (clScalingOperators.childNodes[nIndex].value == M_anCurrentScalingOperators[M_nCurrentMeasure]) {
         nSelectedIndex = nIndex;
         break;
      }
   }
   clScalingOperators.selectedIndex = nSelectedIndex;
}

//-------------------------------------------------------------------
function ValidateScalingFactor()
{
   var bValid = true;
   var cChar;
   var oValue;
   var szValue = document.aspnetForm.ScalingFactor.value;
   
   if (szValue.length > 0) {
      cChar = szValue.charAt(0);
      if (cChar == '0') {
         if (szValue.length > 0) {
            cChar = szValue.charAt(1);
            if (cChar < '0' || cChar > '9') {
               bValid = GPattern.test(szValue);
            }
            else {
               bValid = false;
            }
         }
         else {
            bValid = false;
         }
      }
      else if (!GPattern.test(szValue)) {
         bValid = false;
      }
      if (bValid) {
         oValue = parseFloat(szValue);
         if (isNaN(oValue)) {
            bValid = false;
         }
         else if (oValue == 0 || Math.abs(oValue) > M_dMaxAbsoluteScalingFactor) {
            bValid = false;
         }
      }
   }
   return bValid;
}

//-------------------------------------------------------------------
function switchScalingMeasure() {
   var clScalingDecimalOptions;
   var clScalingOperators;
   var nIndex;
   var nSelectedIndex;

   if (!ValidateScalingFactor()) {
      document.aspnetForm.ScalingMeasures.selectedIndex = M_nCurrentMeasure;
      alert(resInvalidScalingValue + " " + (-M_dMaxAbsoluteScalingFactor).toString() + " "
         + resAndLowercase + " " + M_dMaxAbsoluteScalingFactor.toString() + ".");
      document.aspnetForm.ScalingFactor.focus();
   }
   else {
      clScalingDecimalOptions = document.getElementById("ScalingDecimalOptions");
      clScalingOperators = document.getElementById("ScalingOperator");
      M_astrCurrentScalingFactors[M_nCurrentMeasure] = document.aspnetForm.ScalingFactor.value;
      M_astrCurrentScalingDecimals[M_nCurrentMeasure] = clScalingDecimalOptions.options[clScalingDecimalOptions.selectedIndex].value;
      M_anCurrentScalingOperators[M_nCurrentMeasure] = clScalingOperators.options[clScalingOperators.selectedIndex].value;
      M_nCurrentMeasure = document.aspnetForm.ScalingMeasures.selectedIndex;
      document.aspnetForm.ScalingFactor.value = M_astrCurrentScalingFactors[M_nCurrentMeasure];
      nSelectedIndex = 0;
      for (nIndex = 0; nIndex < clScalingDecimalOptions.childNodes.length; nIndex++) {
         if (nIndex == M_astrCurrentScalingDecimals[M_nCurrentMeasure]) {
            nSelectedIndex = nIndex + 1;
         }
      }
      clScalingDecimalOptions.selectedIndex = nSelectedIndex;
      nSelectedIndex = 0;
      for (nIndex = 0; nIndex < clScalingOperators.childNodes.length; nIndex++) {
         if (clScalingOperators.childNodes[nIndex].value == M_anCurrentScalingOperators[M_nCurrentMeasure]) {
            nSelectedIndex = nIndex;
            break;
         }
      }
      clScalingOperators.selectedIndex = nSelectedIndex;
   }
}

//-------------------------------------------------------------------
function OnClearScaling()
{
   var clScalingDecimalOptions = document.getElementById("ScalingDecimalOptions");
   var clScalingOperators = document.getElementById("ScalingOperator");
   var nIndex;
   
   // Scaling value
   for (nIndex = 0; nIndex < M_astrCurrentScalingFactors.length; nIndex++) {
      M_astrCurrentScalingFactors[nIndex] = "";
   }
   document.aspnetForm.ScalingFactor.value = "";

   // Decimals
   for (nIndex = 0; nIndex < M_astrCurrentScalingDecimals.length; nIndex++) {
      M_astrCurrentScalingDecimals[nIndex] = resDefault;
   }
   clScalingDecimalOptions.selectedIndex = 0;

   // Operators
   for (nIndex = 0; nIndex < M_anCurrentScalingOperators.length; nIndex++) {
      M_anCurrentScalingOperators[nIndex] = SO_MULTIPLY;
   }
   clScalingOperators.selectedIndex = 0;

   document.aspnetForm.ScalingFactor.focus();
}

//-------------------------------------------------------------------
function SubmitScaling(e)
{
   var key = GetKeyCode(e);
   if ( key ==13) {
      OnScalingOptions();
      ResetSubmit(e);
   }
}

//-------------------------------------------------------------------
function OnScalingOptions() {
   var clScalingDecimalOptions = document.getElementById("ScalingDecimalOptions");
   var clScalingOperators = document.getElementById("ScalingOperator");
   var nIndex;
   var nOperator;
   var oValue;
   var szFactor;
   var szDecimal;
   var szMeasureFactors = "";
   
   if (!ValidateScalingFactor()) {
      alert(resInvalidScalingValue + " " + (-M_dMaxAbsoluteScalingFactor).toString() + " "
         + resAndLowercase + " " + M_dMaxAbsoluteScalingFactor.toString() + ".");
      document.aspnetForm.ScalingFactor.focus();
   }
   else {
      M_astrCurrentScalingFactors[M_nCurrentMeasure] = document.aspnetForm.ScalingFactor.value;
      M_astrCurrentScalingDecimals[M_nCurrentMeasure] = clScalingDecimalOptions.options[clScalingDecimalOptions.selectedIndex].value;
      M_anCurrentScalingOperators[M_nCurrentMeasure] = clScalingOperators.options[clScalingOperators.selectedIndex].value;
      for (nIndex = 0; nIndex < M_astrCurrentScalingFactors.length; nIndex++) {
         szFactor = M_astrCurrentScalingFactors[nIndex];
         szDecimal = M_astrCurrentScalingDecimals[nIndex];
         nOperator = M_anCurrentScalingOperators[nIndex];
         if (szFactor.length > 0) {
            oValue = parseFloat(szFactor);
            if (!isNaN(oValue)) {
               if (szMeasureFactors.length > 0) {
                  szMeasureFactors += ";";
               }
               if (szDecimal == resDefault) {
                  szDecimal = "-1"
               }
               szMeasureFactors += nIndex.toString() + "," + szFactor + "," + szDecimal + "," + nOperator.toString();
            }
         }
      }
      document.aspnetForm.scMeasureFactors.value = szMeasureFactors;

      executeWait(document.aspnetForm);
   }
}

