<!-- // Hide the script from browsers which don't support it.

// This function is to perform the sizing calculations for the ST-1200 line of products.
//
// Copyright (c) 2003 by Robert L. Curtis. All rights reserved.

var headStyle; var studPartDzus; var studPartDFCI; 
var srStud; var studSuffix; var seStud; var ssStud;
var studSize ; 
var receStyle; var recePartDzus; var recePartDFCI; var ssRece;
var retaStyle; var retaPartDzus; var retaPartDFCI; retaThick = 0; retaHead = 0;
var retaNest ;
var panel    ;
var gap      ;
var support  ;
var pileup   ;
var undercut   = "";
var deflection = "";
var valid = true;
var inch  = true;

var receCtr  = -1;
var receHDim = new Array();
var receExt  = new Array();
var receSel  = "";
var SQCWasher;

// This function is to clear the part numbers when an error is encountered during the build.  
// This will prevent partial part numbers from being presented to the user.
//
function resetPartNumbers() { 
  studPartDzus = ""; studPartDFCI = ""; 
  recePartDzus = ""; recePartDFCI = ""; 
  retaPartDzus = ""; retaPartDFCI = ""; 
  undercut     = ""; 
  deflection   = ""; valid = false; }

// This function is to determine and set the part numbers
//
function calculatePartNumbers() {

resetPartNumbers();
document.inParms.Notes.value = "";
valid = true;
SQCWasher = false;
studSuffix = "";
studFinish = "";
receFinish = "";
srStud = false;

    // Start by determing the head style which was selected.
srStud = false;
if      (document.inParms.Head[0].checked) { headStyle="Slotted";       studPartDzus="AJ";   studPartDFCI="121J-";  }
else if (document.inParms.Head[1].checked) { headStyle="Flush";         studPartDzus="FJ";   studPartDFCI="126J-";  }
else if (document.inParms.Head[2].checked) { headStyle="Phillips";      studPartDzus="APRJ"; studPartDFCI="121J-P"; }
else if (document.inParms.Head[3].checked) { headStyle="Hex";           studPartDzus="ASHJ"; studPartDFCI="121J-H"; }
else if (document.inParms.Head[4].checked) { headStyle="Ring";          studPartDzus="BJR";  studPartDFCI="122J-R"; }
else if (document.inParms.Head[5].checked) { headStyle="Wing";          studPartDzus="AJW";  studPartDFCI="121J-W"; }
else if (document.inParms.Head[6].checked) { headStyle="Knurled";       studPartDzus="KJ";   studPartDFCI="1211-";  }
else if (document.inParms.Head[7].checked) { headStyle="Tamper Resist"; studPartDzus="MAJ";  studPartDFCI="1230-";  }

    // See if they have specified a Self-Ejecting configuration
if      (document.inParms.SEStud.checked ) seStud=true;
else                                       seStud=false;

    // Next, determine the size which was selected. 
if      (document.inParms.Size[0].checked) studSize  = 3;
else if (document.inParms.Size[1].checked) studSize  = 4;
else if (document.inParms.Size[2].checked) studSize  = 5;
else if (document.inParms.Size[3].checked) studSize  = 65;

    // Add the size to the stud head prefix.
studPartDzus += studSize;
studPartDFCI += studSize;

    // Determine the retainer which was selected and whether or not it is to be nested.
if      (document.inParms.Retainer[0].checked) { retaStyle="Aluminum Half Grommet";     retaPartDzus="GH";  retaPartDFCI="127H-";  }
else if (document.inParms.Retainer[1].checked) { retaStyle="Full Grommet";              retaPartDzus="G";   retaPartDFCI="127";    }
else if (document.inParms.Retainer[2].checked) { retaStyle="Plastic Half Grommet";      retaPartDzus="GP";  retaPartDFCI="127P-";  }
else if (document.inParms.Retainer[3].checked) { retaStyle="Stainless Steel Snap Ring"; retaPartDzus="SR";  retaPartDFCI="1219-R"; }
//else if (document.inParms.Retainer[4].checked) { 
//         retaStyle="Self Retaining Stud";       
//         retaPartDzus="RE"; 
//         retaPartDFCI="RE"; 
//         srStud=true; 
//         if (!document.inParms.SSS.checked) {
//           displayErrorMessage(36);
//           document.inParms.SSS.checked = true; 
//         }
//         }
//else if (document.inParms.Retainer[5].checked) { retaStyle="Self Retained";             
//                                                 retaPartDzus="SRA"; 
//                                                 retaPartDFCI="SRA"; 
//                                               }
//else if (document.inParms.Retainer[6].checked) { retaStyle="Self Retained Ejecting";    
//                                                 retaPartDzus="SRE"; 
//                                                 retaPartDFCI="SRE"; 
//                                               }
else if (document.inParms.Retainer[4].checked) { 
         retaStyle="No Retainer";               
         retaPartDzus="";    
         retaPartDFCI="";    }

if      (document.inParms.Nest.checked) retaNest  = true; 
else                                    retaNest  = false;

    // See if they have specified a Stainless Steel Stud
if      (document.inParms.SSS.checked ) ssStud=true;
else                                    ssStud=false;

    // Determine the type of receptacle which was selected.
if      (document.inParms.Receptacle[0].checked) { 
         receStyle="S-Spring";                 
         recePartDzus="S";   
         recePartDFCI="1219-";   }
else if (document.inParms.Receptacle[1].checked) { 
         receStyle="Weld Plate";               
         recePartDzus="X";   
         recePartDFCI="1224-";   }
else if (document.inParms.Receptacle[2].checked) { 
         receStyle="Clip-In";                  
         recePartDzus="SQC"; 
         recePartDFCI="1219-QC"; }
else if (document.inParms.Receptacle[3].checked) { 
         receStyle="Right Angle Spring Plate"; 
         recePartDzus="RP";  
         recePartDFCI="1218-P";  }
else if (document.inParms.Receptacle[4].checked) { 
         receStyle="Slip-On";                  
         recePartDzus="SL";  
         recePartDFCI="1219-L";  }

    // See if they has specified a Stainless Steel Receptacle
if   (document.inParms.SSR.checked ) { receStyle += " / Stainless"; ssRece=true;  }
else                                 {                              ssRece=false; }

    // read in the panel, gap, and support values.
panel   = document.inParms.Panel.value;
gap     = document.inParms.Gap.value;
support = document.inParms.Support.value;


    // set the information which was entered in the display.
document.inParms.studSpec.value = headStyle + " Size " + studSize 
                                            + ((srStud)   ? " / Retaining" : "")
                                            + ((seStud)   ? " / Ejecting"  : "")
                                            + ((ssStud)   ? " / Stainless" : "");
document.inParms.retaSpec.value = retaStyle + ((retaNest) ? " / Nested"    : "");
document.inParms.receSpec.value = receStyle;
setPileText(0,0);

    // do some validation on the input information.
    //   1. A panel thickness is required.  
if (panel   == "") displayErrorMessage(10); else panel = eval(panel);     
if (gap     == "") gap = 0;                 else gap = eval(gap);         
if (support == "") support = 0;             else support = eval(support); 

if      (document.inParms.UOM[0].checked) { inch = true;  }
else if (document.inParms.UOM[1].checked) { inch = false; }

if (!inch) {
  panel   *= .03937;
  gap     *= .03937;
  support *= .03937;
}

    //   2. If the SQC receptacle was selected, verify that it is a size 4 stud.
if (valid)
  if ((recePartDzus == "SQC") && (studSize != 4)) displayErrorMessage(9); 

    //   2a. If the Slip-On receptacle was selected, verify that it is a size 4 or 5 stud.
if (valid)
  if ((recePartDzus == "SL") && (studSize != 4) && (studSize != 5)) displayErrorMessage(29);

    //   2b. Check for the Self Ejecting configuration with either Self Retaining configuration
//if (valid)
//  if (seStud)
//    if ((retaPartDzus == "SRA") || (retaPartDzus == "SRE")) { 
//      displayErrorMessage(26);
//      document.inParms.SEStud.checked = false;      seStud = false;
//      document.inParms.Retainer[5].checked = false; 
//      document.inParms.Retainer[6].checked = true;  retaPartDzus = "SRE";
//    }  
//
//    //   2c. Self retained assembly / Self retained ejecting assembly
//if (valid)
//  if ((retaPartDzus == "SRA") || (retaPartDzus == "SRE")) {
//    studSuffix = " " + retaPartDzus;
//         if (panel <  0.031) displayErrorMessage(20);
//    else if (panel <= 0.049) studSuffix += "1";
//    else if (panel <= 0.069) studSuffix += "2";
//    else if (panel <= 0.089) studSuffix += "3";
//    else if (panel <= 0.109) studSuffix += "4";
//    else if (panel <= 0.129) studSuffix += "5";
//    else displayErrorMessage(20);
//  }

    //   2d. Verfiy the stud size for the Self-Ejecting configuration
if (valid)
  if (seStud) 
    if ((studSize != 3) && (studSize != 4) && (studSize != 5)) displayErrorMessage(24);

    //   2e. Check for a self-ejecting configuration without a retainer.
if (valid)
  if (seStud)
    if (retaPartDzus == "") displayErrorMessage(25);

    //   2f. Stainless Steel Receptacles are limited to S-Springs and Weld Plates 
    //      (Press-in are not handled by this program.)
if (valid)
  if (ssRece)
    if ((recePartDzus != "S") && (recePartDzus != "X")) displayErrorMessage(28);

    //   3. Verify the gap is sufficient
if (valid) {
  setRetainerPart();
  setPileUp();  // this routine will display the error message.
}


    //   4. Verify the receptacle based on the size of the stud.
if (valid) {
  switch (studSize) {
    case 3  : { if ((recePartDzus == "SQC") || 
                    (recePartDzus == "SL"))    displayErrorMessage(3); break; }
    case 4  : { if (recePartDzus == "")        displayErrorMessage(4); break; }
    case 5  : { if (recePartDzus == "SQC")     displayErrorMessage(5); break; }
    case 65 : { if ((recePartDzus == "SQC") || 
                    (recePartDzus == "RP")  || 
                    (recePartDzus == "SL"))    displayErrorMessage(6); break; }
  }
}

    // 5. Check to see if the total pileup for the part is in the valid range.
if (valid)
  switch (studSize) {
    case 3  : { if (pileup <= 40 || pileup >=  694) displayErrorMessage(8);  break; }
    case 4  : { if (pileup <= 25 || pileup >= 1049) displayErrorMessage(13); break; }
    case 5  : { if (pileup <= 40 || pileup >= 1054) displayErrorMessage(14); break; }
    case 65 : { if (pileup <= 55 || pileup >= 1039) displayErrorMessage(15); break; }
  }

    // 6. Verify the support thickness for the SQC4 receptacle
    //    and set the receptacle part number.
if (valid) 
  if (recePartDzus == "SQC") {
      // Set the SQC4- part number.
         if (support <  0.031) displayErrorMessage(1);
    else if (support <= 0.056) { recePartDzus += "4-16"; recePartDFCI += "416"; }
    else if (support <= 0.078) { recePartDzus += "4-20"; recePartDFCI += "420"; }
    else if (support <= 0.098) { recePartDzus += "4-25"; recePartDFCI += "425"; }
    else if (support <= 0.125) { recePartDzus += "4-30"; recePartDFCI += "430"; }
    else displayErrorMessage(1);
            // Determine the stud part number for this receptacle
    if (valid) {
      receCtr = 1; receHDim[0] = 452; receExt[0] = "";
      setSize4();
    } 
  }
  else {  // Not an SQC receptacle
    setReceptacleParms();
    if (valid) {
      switch (studSize) {
        case 3  : { setSize3();  break; }
        case 4  : { setSize4();  break; }
        case 5  : { setSize5();  break; }
        case 65 : { setSize65(); break; }
      }
    }
  }

    // Set the receptacle part number for the display
if (valid) setReceptaclePartNumber();

    // Set self-ejecting option.
if (valid) {
  if (srStud) { studPartDzus += " RE"; studPartDFCI += "-RE";}
  if (seStud) { studPartDzus += " SE"; studPartDFCI += "-SE";}
  if (retaPartDzus == "RE") { retaPartDzus = ""; retaPartDFCI = ""; }
//  if ((retaPartDzus == "SRA") || (retaPartDzus == "SRE")) { studPartDzus += studSuffix; retaPartDzus = ""; }
}

    // Add the Stainless Steel and/or finish suffix to the stud
if (valid)
  if (ssStud) { studPartDzus += " SS"; studPartDFCI += "-SS"; }
  else        {   // stuFinish
//    studPartDFCI += "-Z3C"; 
    for (i = 0 ; i < document.inParms.stuFinish.length ; ++i ) {
      if (document.inParms.stuFinish[i].checked) {
        studPartDFCI += '-' + document.inParms.stuFinish[i].value;
      }
    }
  }

    // Add the Stainless Steel suffix to the receptacle
if (valid)
  if (ssRece) { recePartDzus += " SS"; recePartDFCI += "-SS"; }
  else        {  // retFinish
//    recePartDFCI += "-Z3Y"; 
    for (i = 0 ; i < document.inParms.recFinish.length ; ++i ) {
      if (document.inParms.recFinish[i].checked) {
        recePartDFCI += '-' + document.inParms.recFinish[i].value;
      }
    }
  }

    // Set the part numbers in the display
    // if there is an error, the fields will be blank
document.inParms.studPartDFCI.value   = studPartDFCI; 
document.inParms.retaPartDFCI.value   = retaPartDFCI;
document.inParms.recePartDFCI.value   = recePartDFCI;
if (!inch) { 
  var temp = undercut / .03937;
  temp = parseInt(temp * 100) / 100;
  undercut = temp;
  undercut += " mm";
  deflection += " mm";
}
document.inParms.Undercut.value   = undercut ;
document.inParms.Deflection.value = deflection;
if (SQCWasher) displayErrorMessage(19);
}


    // This function is to set the receptacle part number.
function setReceptaclePartNumber() {
  if (recePartDzus ==  "S") { 
    if (studSize == 65) { 
      recePartDzus += "6"; 
      recePartDFCI += "6"; 
    }
    else { 
      if (studSize == 5) {  // The specification for size 5 is "S5A" 
        recePartDzus += "A"; 
        recePartDFCI += "A"; 
      }
      recePartDzus += studSize; 
      recePartDFCI += studSize; 
    }
    recePartDzus += receSel; 
    recePartDFCI += receSel.substr(1,receSel.length); 
  }
  else if (recePartDzus ==  "X") { 
    switch (studSize) {
      case 3  : { recePartDzus += "735"; recePartDFCI += "735"; break; }
      case 4  : { recePartDzus += "485"; recePartDFCI += "485"; break; }
      case 5  : { recePartDzus += "414"; recePartDFCI += "414"; break; }
      case 65 : { recePartDzus += "441"; recePartDFCI += "441"; break; }
    }
    recePartDzus += receSel;
    recePartDFCI += receSel;
  }
  else if (recePartDzus == "SL") { 
    recePartDzus += studSize;
    recePartDFCI += studSize;
         if (support <  0.036) displayErrorMessage(11);
    else if (support <= 0.128) ;
    else if (support <= 0.220) {
      if (studSize == 4) displayErrorMessage(16);
      else               { recePartDzus += "Y"; recePartDFCI += "Y"; }
    }
//  else if (support <= 0.315) { recePartDzus += "X"; recePartDFCI += "24"; }
    else displayErrorMessage(16);
    if (valid) { 
      recePartDzus += receSel; 
      recePartDFCI += receSel.substring(1,receSel.length); 
    }
  }
  else if (recePartDzus == "RP") { 
    recePartDzus += studSize + receSel; 
    recePartDFCI += studSize + receSel.substring(1,receSel.length); 
  }
}

    // This function is to lookup the parameters for the selected
    // receptacle and to set the "h" dimension table for the selected
    // receptacle and size.  This will also set the control information
    // to set the receptacle part number.
function setReceptacleParms() {
  switch (studSize) {
    case 3  : {      if (recePartDzus ==  "S") {
                        receCtr = 4;
                        receHDim[0] = 150; receExt[0] = "-150";
                        receHDim[1] = 175; receExt[1] = "-175";
                        receHDim[2] = 200; receExt[2] = "-200";
                        receHDim[3] = 225; receExt[3] = "-225";
                        }
                else if (recePartDzus ==  "X" || recePartDzus == "RP") {
                        receCtr = 4;
                        receHDim[0] = 205; receExt[0] = "-205";
                        receHDim[1] = 230; receExt[1] = "-230";
                        receHDim[2] = 255; receExt[2] = "-255";
                        receHDim[3] = 280; receExt[3] = "-280";
                        }
                else    displayErrorMessage(3);
                break; }
    case 4  : {      if (recePartDzus ==  "S") {
                        receCtr = 4;
                        receHDim[0] = 200; receExt[0] = "-200";
                        receHDim[1] = 225; receExt[1] = "-225";
                        receHDim[2] = 250; receExt[2] = "-250";
                        receHDim[3] = 275; receExt[3] = "-275";
                        }
                else if ((recePartDzus ==  "X") || (recePartDzus == "RP")) {
                        receCtr = 2;
                        receHDim[0] = 275; receExt[0] = "-275";
                        receHDim[1] = 300; receExt[1] = "-300";
                        }
                else if (recePartDzus == "SL") {
                        receCtr = 2;
                        receHDim[0] = 280; receExt[0] = "-280";
                        receHDim[1] = 305; receExt[1] = "-305";
                        }
                else    displayErrorMessage(4);
                break; }
    case 5  : {      if (recePartDzus ==  "S") {
                        receCtr = 4;
                        receHDim[0] = 200; receExt[0] = "-200";
                        receHDim[1] = 225; receExt[1] = "-225";
                        receHDim[2] = 250; receExt[2] = "-250";
                        receHDim[3] = 275; receExt[3] = "-275";
                        }
                else if ((recePartDzus ==  "X") || (recePartDzus == "RP")) {
                        receCtr = 4;
                        receHDim[0] = 285; receExt[0] = "-285";
                        receHDim[1] = 310; receExt[1] = "-310";
                        receHDim[2] = 335; receExt[2] = "-335";
                        receHDim[3] = 360; receExt[3] = "-360";
                        }
                else if (recePartDzus == "SL") {
                        receCtr = 4;
                        receHDim[0] = 280; receExt[0] = "-280";
                        receHDim[1] = 305; receExt[1] = "-305";
                        receHDim[2] = 330; receExt[2] = "-330";
                        receHDim[3] = 355; receExt[3] = "-355";
                        }
                else    displayErrorMessage(5);
                break; }
    case 65 : {      if (recePartDzus ==  "S") {
                        receCtr = 4;
                        receHDim[0] = 225; receExt[0] = "-225";
                        receHDim[1] = 250; receExt[1] = "-250";
                        receHDim[2] = 275; receExt[2] = "-275";
                        receHDim[3] = 300; receExt[3] = "-300";
                        }
                else if (recePartDzus ==  "X") {
                        receCtr = 4;
                        receHDim[0] = 310; receExt[0] = "-310";
                        receHDim[1] = 335; receExt[1] = "-335";
                        receHDim[2] = 360; receExt[2] = "-360";
                        receHDim[3] = 385; receExt[3] = "-385";
                        }
                else    displayErrorMessage(6);
                break; }
  }
}

    // This function is to set the retainer part number
function setRetainerPart() {
  retaThick = 0; retaHead = 0;
  if (retaPartDzus != "") {
    if (retaPartDzus == "GH")
      switch (studSize) {
        case 3  : { retaThick = 15; 
                    retaPartDzus += studSize; 
                    retaPartDFCI += studSize; 
                    break; }
        case 4  : { retaThick = 25; 
                    retaPartDzus += studSize; 
                    retaPartDFCI += studSize; 
                    break; }
        case 5  : { retaThick = 31; 
                    retaPartDzus += studSize; 
                    retaPartDFCI += studSize; 
                    break; }
        case 65 : { retaThick = 40; 
                    retaPartDzus += 7;        
                    retaPartDFCI += 7;        
                    break; }
      }
    else if (retaPartDzus == "GP") {
      switch (studSize) {
        case 3  : { retaThick = 30; 
                    retaPartDzus += studSize + "B"; 
                    retaPartDFCI += studSize + "B"; 
                    break; }
        case 4  : { retaThick = 35; 
                    retaPartDzus += studSize + "B"; 
                    retaPartDFCI += studSize + "B"; 
                    break; }
        case 5  : { retaThick = 35; 
                    retaPartDzus += studSize + "B"; 
                    retaPartDFCI += studSize + "B"; 
                    break; }
        case 65 : { retaThick = 45; 
                    retaPartDzus += 6 + "B";        
                    retaPartDFCI += 6 + "B";        
                    break; }
      }
    }
    else if (retaPartDzus == "SR") {
      switch (studSize) {
        case 3  : { retaThick = 22; 
                    retaPartDzus += studSize + "SS"; 
                    retaPartDFCI += studSize + "-SS"; 
                    break; }
        case 4  : { retaThick = 29; 
                    retaPartDzus += studSize + "SS"; 
                    retaPartDFCI += studSize + "-SS"; 
                    break; }
        case 5  : { retaThick = 35; 
                    retaPartDzus += studSize + "SS"; 
                    retaPartDFCI += studSize + "-SS"; 
                    break; }
        case 65 : { retaThick = 51; 
                    retaPartDzus += 7 + "SS";        
                    retaPartDFCI += 7 + "-SS";        
                    break; }
      }
    }
    else if (retaPartDzus == "G") {
      var len = "";
      var lenf = "";
      switch (studSize) {
        case 3  : { retaThick = 15; retaHead = 15;
                         if (studPartDzus.substring(0,2) == "FJ") displayErrorMessage(34);
                    else if (panel <  .015) displayErrorMessage(30);
                    else if (panel <= .025) len = "-175";
                    else if (panel <= .050) len = "-200";
                    else if (panel <= .094) len = "-250";
                    else displayErrorMessage(30);
                    break; }
        case 4  : { retaThick = 25; retaHead = 25;
                         if (panel <  .015) displayErrorMessage(31);
                    else if (panel <= .025) { len = "-225"; lenf = "-125"; }
                    else if (panel <= .050) { len = "-250"; lenf = "-150"; }
                    else if (panel <= .075) { len = "-275"; lenf = "-175"; }
                    else if (panel <= .100) { len = "-300"; lenf = "-200"; }
                    else displayErrorMessage(31);
                    break; }
        case 5  : { retaThick = 28; retaHead = 28;
                         if (panel <  .031) displayErrorMessage(32);
                    else if (panel <= .062) { len = "-312"; lenf = "-175"; }
                    else if (panel <= .094) { len = "-350"; lenf = "-225"; }
                    else if (panel <= .125) { len = "-375"; lenf = "-250"; }
                    else displayErrorMessage(32);
                    break; }
        case 65 : { retaThick = 35; retaHead = 35;
                    //      if (studPartDzus.substring(0,2) == "FJ") displayErrorMessage(35);
                    // else 
                    if (panel <  .050) displayErrorMessage(33);
                    else if (panel <= .095) { len = "-375"; lenf = "-250"; }
                    else if (panel <= .156) { len = "-475"; lenf = "-325"; }
                    else if (panel <= .218) { len = "-525"; lenf = "-400"; }
                    else displayErrorMessage(33);
                    break; }
      }
      if (valid) 
        if (studPartDzus.substring(0,2) == "FJ") {
          switch (studSize) {
            case 3  : { retSiz = "3"; break; }
            case 4  : { retSiz = "4"; break; }
            case 5  : { retSiz = "5"; break; }
            case 65 : { retSiz = "65"; break; }
          }
          retaPartDzus += "F" + retSiz + lenf;
          retaPartDFCI += "6-" + retSiz + lenf.substring(1,lenf.length);
        }
        else {
          retaPartDzus += "A" + studSize + len;
          retaPartDFCI += "1-" + studSize + len.substring(1,len.length);
        }
    }
  }
}

    // This function is to calculate the pileup allowing for the min gap required
    //      If the retainer is tagged as nested in the panel or support, there is
    //      no minimum gap required.
function setPileUp() {
  var gapth = parseInt(gap * 1000);
  var supth = parseInt(support * 1000);
  var gmin  = retaThick;
  pileup    = parseInt(panel * 1000);
  if (recePartDzus == "SQC") { // Clip-In -- pileup excludes support
    if (retaPartDzus == "SR4SS") retaNest = true; // Snap Ring fits into SQC
    else                   { retaThick += 20; 
                             gmin = retaThick;
                             displayErrorMessage(7); }
    if (retaNest) {
      if (gapth < 20) { pileup += 20; 
                        gmin = 20;
                        displayErrorMessage(7); }
      else            pileup += gapth;
    }
    else          pileup += (retaThick > gapth) ? retaThick : gapth;
  }
  else if (recePartDzus == "RP") {   // exclude support dimension for RP
         retaNest = true;            // the RP is dimpled to absorb retainers
         pileup += gapth; 
         if (eval(support) > 0) displayErrorMessage(18); 
  }
  else if (recePartDzus == "SL") {   // slip on receptacle will absorb the snap ring
         if (retaPartDzus == "SR4SS" || retaPartDzus == "SR5SS") { 
           retaNest = true;
           pileup += gapth + supth;
         }
         else        pileup += ((retaThick > gapth) ? retaThick : gapth) + supth;
  }
  else if (retaNest) pileup += gapth + supth;
       else          pileup += ((retaThick > gapth) ? retaThick : gapth) + supth;
  if ((!retaNest) && (retaThick > gapth)) displayErrorMessage(2);
//       if (retaPartDzus == "SRA") { displayErrorMessage(21); pileup += 40; }
//  else if (retaPartDzus == "SRE") { displayErrorMessage(22); pileup += 90; }
//  else 
  if (seStud)            { displayErrorMessage(23); pileup += 90; }
      // Add the retainer under the head if applicable.
  if (retaHead != 0) {
    pileup += retaHead;
    displayErrorMessage(37);
  }
  setPileText(pileup,gmin);
}

    // This function is to set the "panel / max(gap,gmin) / support = pileup" display
function setPileText(pileup,gmin) {
  var gapth = gap * 1000;
  var work  = "";
  if (inch) {
    work  += panel;
    if (seStud) work += " + SECup "; 
    work += " / ";
    if (gmin <= gapth) work += gap;
    else               work += "max(" + gap + "," + (gmin / 1000) + ")";
    work += " / " + support;
    if (recePartDzus == "SQC" || recePartDzus == "RP") work += " N/U";
    if (pileup > 0) work += " = " + (pileup / 1000);
  }
  else {
    work  += panel / .03937;
    if (seStud) work += " + SECup "; 
    work += " / ";
    if (gmin <= gapth) work += (gap / .03937);
    else               work += "max(" + (gap/.03937) + "," + ((gmin / 1000)/.03937) + ")";
    work += " / " + (support/.03937);
    if (recePartDzus == "SQC" || recePartDzus == "RP") work += " N/U";
    if (pileup > 0) { 
      var temp = parseInt(((pileup / 1000) / .03937) * 100);
      work += " = " + (temp / 100) + " mm";
    }
  }
  document.inParms.pgsSpec.value = work;
}

    // This function is to set the part number for the size 3 stud.
function setSize3 () {
  var d   = new Array();
      d[ 0] =  "-25"; d[ 1] =  "-30"; d[ 2] =  "-35"; d[ 3] =  "-40"; d[ 4] =  "-45";  
      d[ 5] =  "-50"; d[ 6] =  "-55"; d[ 7] =  "-60"; d[ 8] =  "-65"; d[ 9] =  "-70"; 
      d[10] =  "-75"; d[11] =  "-80";  
  var l   = new Array();
      l[ 0] = 250; l[ 1] = 300; l[ 2] = 350; l[ 3] = 400; l[ 4] = 450;  
      l[ 5] = 500; l[ 6] = 550; l[ 7] = 600; l[ 8] = 650; l[ 9] = 700; 
      l[10] = 750; l[11] = 800;  
  var b   = new Array();
      b[ 0] =  75; b[ 1] = 100; b[ 2] = 150; b[ 3] = 200; b[ 4] = 225; 
      b[ 5] = 250; b[ 6] = 275; b[ 7] = 300; b[ 8] = 350; b[ 9] = 350; 
      b[10] = 400; b[11] = 400;  
  var FJb = new Array();
      FJb[ 0] = 150; FJb[ 1] = 150; FJb[ 2] = 175; FJb[ 3] = 200; FJb[ 4] = 225; 
      FJb[ 5] = 250; FJb[ 6] = 275; FJb[ 7] = 300; FJb[ 8] = 350; FJb[ 9] = 350; 
      FJb[10] = 400; FJb[11] = 400;  
  var match = false;
  for ( j = 0 ; j < receCtr && !match ; ++j ) {
    for ( i = 0 ; i < 12 && !match ; ++i ) {
      lLim = l[i] - receHDim[j] + 20;
      uLim = l[i] - receHDim[j] + 44;
      if ( pileup >= lLim && pileup <= uLim ) {
        bDim = (studPartDzus == "FJ3") ? FJb[i] : b[i];
        if (bDim > (panel + retaThick + retaHead)) {
          studPartDzus += d[i]; 
          studPartDFCI += d[i].substring(1,d[i].length); 
          receSel = receExt[j];
          undercut = bDim / 1000;
          deflection = pileup - l[i] + receHDim[j];
          deflection /= 1000;
          if (inch) {
            deflection = "0.020 / 0.044 / " + deflection;
          }
          else {
             deflection = parseInt((deflection / .03937) * 100) / 100;
             deflection = "0.51 / 1.12 / " + deflection;
          }
          match = true;
        }
      }
    }
  }
  if (!match) displayErrorMessage(17);
}

    // This function is to set the part number for the size 4 stud.
function setSize4 () {
  var d   = new Array();
      d[ 0] =  "-25"; d[ 1] =  "-30"; d[ 2] =  "-35"; d[ 3] =  "-40"; d[ 4] =  "-45";  
      d[ 5] =  "-50"; d[ 6] =  "-55"; d[ 7] =  "-60"; d[ 8] =  "-65"; d[ 9] =  "-70"; 
      d[10] =  "-75"; d[11] =  "-80"; d[12] =  "-85"; d[13] =  "-90"; d[14] =  "-95"; 
      d[15] = "-100"; d[16] = "-105"; d[17] = "-110"; d[18] = "-115"; d[19] = "-120";
  var l   = new Array();
      l[ 0] =  250; l[ 1] =  300; l[ 2] =  350; l[ 3] =  400; l[ 4] =  450;  
      l[ 5] =  500; l[ 6] =  550; l[ 7] =  600; l[ 8] =  650; l[ 9] =  700; 
      l[10] =  750; l[11] =  800; l[12] =  850; l[13] =  900; l[14] =  950; 
      l[15] = 1000; l[16] = 1050; l[17] = 1100; l[18] = 1150; l[19] = 1200;
  var b   = new Array();
      b[ 0] = 100; b[ 1] = 100; b[ 2] = 150; b[ 3] = 200; b[ 4] = 225; 
      b[ 5] = 250; b[ 6] = 275; b[ 7] = 300; b[ 8] = 350; b[ 9] = 350; 
      b[10] = 400; b[11] = 400; b[12] = 500; b[13] = 500; b[14] = 600; 
      b[15] = 600; b[16] = 600; b[17] = 600; b[18] = 600; b[19] = 600;
  var FJb = new Array();
      FJb[ 0] = 000; FJb[ 1] = 000; FJb[ 2] = 175; FJb[ 3] = 200; FJb[ 4] = 225; 
      FJb[ 5] = 250; FJb[ 6] = 275; FJb[ 7] = 300; FJb[ 8] = 350; FJb[ 9] = 350; 
      FJb[10] = 400; FJb[11] = 400; FJb[12] = 500; FJb[13] = 500; FJb[14] = 600; 
      FJb[15] = 600; FJb[16] = 600; FJb[17] = 600; FJb[18] = 600; FJb[19] = 600;
  var lDim;
  var match = false;
  SQCWasher = false;
  for ( j = 0 ; j < receCtr && !match ; ++j ) {
    for ( i = 0 ; i < 20 && !match ; ++i ) {
      if (recePartDzus.substring(0,3) == "SQC") { 
        lDim = (pileup + receHDim[j]) / 50;
        lDim = parseInt(lDim);    // truncate the calculation to an integer.
        lDim *= 50;
        if (lDim == l[i]) {
          bDim = (studPartDzus == "FJ4") ? FJb[i] : b[i];
          if (bDim > (panel + retaThick + retaHead)) {
            studPartDzus  += d[i];
            studPartDFCI  += d[i].substring(1,d[1].length);
            undercut   = bDim / 1000;
            deflection = pileup - l[i] + receHDim[j];
            if (deflection < 20) { deflection += 25; SQCWasher = true; }
            deflection /= 1000;
            if (inch) {
              deflection = "0.020 / 0.044 / " + deflection;
            }
            else {
               deflection = parseInt((deflection / .03937) * 100) / 100;
               deflection = "0.51 / 1.14 / " + deflection;
            }
            match = true;
          }
        }
      }
      else {
        lLim = l[i] - receHDim[j] + 25;
        uLim = l[i] - receHDim[j] + 49; 
        if ( pileup >= lLim && pileup <= uLim ) {
          bDim = (studPartDzus == "FJ4") ? FJb[i] : b[i];
          if (bDim > (panel + retaThick + retaHead)) {
            studPartDzus += d[i]; 
            studPartDFCI += d[i].substring(1,d[i].length); 
            receSel = receExt[j];
            undercut = bDim / 1000;
            deflection = pileup - l[i] + receHDim[j];
            deflection /= 1000;
            if (inch) {
              deflection = "0.025 / 0.049 / " + deflection;
            }
            else {
               deflection = parseInt((deflection / .03937) * 100) / 100;
               deflection = "0.64 / 1.24 / " + deflection;
            }
            match = true;
          }
        }
      }
    }
  }
  if (!match) displayErrorMessage(17);
}

    // This function is to set the part number for the size 5 stud.
function setSize5 () {
  var d   = new Array();
      d[ 0] = "-30"; d[ 1] = "-40"; d[ 2] =  "-50"; d[ 3] =  "-60"; d[ 4] =  "-70";  
      d[ 5] = "-80"; d[ 6] = "-90"; d[ 7] = "-100"; d[ 8] = "-110"; d[ 9] = "-120"; 
  var l   = new Array();
      l[ 0] =  300; l[ 1] =  400; l[ 2] =  500; l[ 3] =  600; l[ 4] =  700;  
      l[ 5] =  800; l[ 6] =  900; l[ 7] = 1000; l[ 8] = 1100; l[ 9] = 1200; 
  var b   = new Array();
      b[ 0] = 125; b[ 1] = 190; b[ 2] = 250; b[ 3] = 300; b[ 4] = 400; 
      b[ 5] = 500; b[ 6] = 600; b[ 7] = 700; b[ 8] = 700; b[ 9] = 700; 
  var FJb = new Array();
      FJb[ 0] = 000; FJb[ 1] = 225; FJb[ 2] = 250; FJb[ 3] = 300; FJb[ 4] = 400; 
      FJb[ 5] = 500; FJb[ 6] = 600; FJb[ 7] = 700; FJb[ 8] = 700; FJb[ 9] = 700; 
  var match = false;
  for ( j = 0 ; j < receCtr && !match ; ++j ) {
    for ( i = 0 ; i < 10 && !match ; ++i ) {
      lLim = l[i] - receHDim[j] + 30;
      uLim = l[i] - receHDim[j] + 54;
      if ( pileup >= lLim && pileup <= uLim ) {
        bDim = (studPartDzus == "FJ5") ? FJb[i] : b[i];
        if (bDim > (panel + retaThick + retaHead)) {
          studPartDzus += d[i]; 
          studPartDFCI += d[i].substring(1,d[i].length); 
          receSel = receExt[j];
          undercut = bDim / 1000;
          deflection = pileup - l[i] + receHDim[j];
          deflection /= 1000;
          if (inch) {
            deflection = "0.030 / 0.054 / " + deflection;
          }
          else {
             deflection = parseInt((deflection / .03937) * 100) / 100;
             deflection = "0.76 / 1.37 / " + deflection;
          }
          match = true;
        }
      }
    }
  }
  if (!match) displayErrorMessage(17);
}

    // This function is to set the part number for the size 65 stud.
function setSize65 () {
  var d   = new Array();
      d[ 0] =  "-40"; d[ 1] =  "-50"; d[ 2] =  "-60"; d[ 3] =  "-70";  
      d[ 4] =  "-80"; d[ 5] =  "-90"; d[ 6] = "-100"; d[ 7] = "-110"; 
      d[ 8] = "-120"; 
  var l   = new Array();
      l[ 0] =  400; l[ 1] =  500; l[ 2] =  600; l[ 3] =  700;  
      l[ 4] =  800; l[ 5] =  900; l[ 6] = 1000; l[ 7] = 1100; 
      l[ 8] = 1200; 
  var b   = new Array();
      b[ 0] = 190; b[ 1] = 250; b[ 2] = 300; b[ 3] = 350; 
      b[ 4] = 450; b[ 5] = 550; b[ 6] = 650; b[ 7] = 650; 
      b[ 8] = 650; 
  var FJb = new Array();
      FJb[ 0] =   0; FJb[ 1] = 250; FJb[ 2] = 300; FJb[ 3] = 350; 
      FJb[ 4] = 450; FJb[ 5] = 550; FJb[ 6] = 650; FJb[ 7] = 650; 
      FJb[ 8] = 650; 
  var match = false;
  for ( j = 0 ; j < receCtr && !match ; ++j ) {
    for ( i = 0 ; i < 9 && !match ; ++i ) {
      lLim = l[i] - receHDim[j] + 40;
      uLim = l[i] - receHDim[j] + 64;
      if ( pileup >= lLim && pileup <= uLim ) {
        bDim = (studPartDzus == "FJ65") ? FJb[i] : b[i];
        if (bDim > (panel + retaThick + retaHead)) {
          studPartDzus += d[i]; 
          studPartDFCI += d[i].substring(1,d[i].length); 
          receSel = receExt[j];
          undercut = bDim / 1000;
          deflection = pileup - l[i] + receHDim[j];
          deflection /= 1000;
          if (inch) {
            deflection = "0.040 / 0.064 / " + deflection;
          }
          else {
             deflection = parseInt((deflection / .03937) * 100) / 100;
             deflection = "1.02 / 1.63 / " + deflection;
          }
          match = true;
        }
      }
    }
  }
  if (!match) displayErrorMessage(17);
}

    // This function is to display error messages as alerts.
function displayErrorMessage(msgno) {
var messages = new Array();
var severity = new Array();
var numberOfMessages = 37;
severity[ 0] = 2; messages[ 0] = "0: Undefined message number [" + msgno + "] was requested";
severity[ 1] = 2; messages[ 1] = "1: The support thickness for the Clip-In Receptacle must be between .031\" (.79 mm)  and .125\" (3.18 mm).";
severity[ 2] = 1; messages[ 2] = "2: The gap which you specified is insufficient for the retainer which was selected.  The calculated minimum gap will be used for the pileup calculation.";
severity[ 3] = 2; messages[ 3] = "3: Size 3 Studs support S-Spring, Weld Plate and Right Angle Spring Plate receptacles only!";
severity[ 4] = 2; messages[ 4] = "4: Size 4 Studs support S-Spring, Weld Plate, Right Angle Spring Plate, Clip-In and Slip-On Receptacles only!";
severity[ 5] = 2; messages[ 5] = "5: Size 5 Studs support S-Spring, Weld Plate, Right Angle Spring Plate, and Slip-On Receptacles only!";
severity[ 6] = 2; messages[ 6] = "6: Size 65 Studs support S-Spring and Weld Plate Receptacles only!";
severity[ 7] = 1; messages[ 7] = "7: For the 1219-QC4 Receptacle, a minimum gap of .020\" (.51 mm) is required!";
severity[ 8] = 2; messages[ 8] = "8: The total pileup for the Size 3 stud must be between 0.040\" (1.02 mm) and 0.694\" (17.63 mm)!";
severity[ 9] = 2; messages[ 9] = "9: The Clip-In receptacle can be used only with a size 4 stud!";
severity[10] = 2; messages[10] = "10: A Panel Thickness is required!";
severity[11] = 2; messages[11] = "11: The support thickness for the Slip-On Receptacle must be between .036\" (9.14 mm) and .315\" (8.00 mm)!";
severity[12] = 2; messages[12] = "12: The Plastic Grommet is not supported on the Size 7 Stud!";
severity[13] = 2; messages[13] = "13: The total pileup for the Size 4 stud must be between 0.025\" (.64 mm) and 1.049\" (26.64 mm)!";
severity[14] = 2; messages[14] = "14: The total pileup for the Size 5 stud must be between 0.040\" (1.02 mm) and 1.054\" (26.77 mm)!";
severity[15] = 2; messages[15] = "15: The total pileup for the Size 65 stud must be between 0.140\" (3.56 mm) and 1.039\" (26.39 mm)!";
severity[16] = 2; messages[16] = "16: I am unable to determine part numbers for your requirements!\n\nPlease call for assistance.";
severity[17] = 2; messages[17] = "17: I am unable to find a stud which will fit your requirements!\n\nPlease call for assistance.";
severity[18] = 0; messages[18] = "18: The support thickness is not used in the calculation of the pileup for the Right Angle Spring Plate.";
severity[19] = 0; messages[19] = "19: One 127P-4 Washer will be required under the stud head.";
severity[20] = 2; messages[20] = "20: The panel thickness for a self-retained assembly must be between 0.031\" (.79 mm) and 0.129\" (3.28 mm)!";
severity[21] = 1; messages[21] = "21: To accomodate the Self Retained Assembly, 0.040\" (1.02 mm) has been added to the total pileup!";
severity[22] = 1; messages[22] = "22: To accomodate the Self Retained Ejecting Assembly, 0.090\" (2.29 mm) has been added to the total pileup!";
severity[23] = 1; messages[23] = "23: To accomodate the Self Ejecting configuration, 0.090\" (2.29 mm) has been added to the total pileup!";
severity[24] = 2; messages[24] = "24: The Self Ejecting configuration is only available for the Size 3, 4, and 5 studs!";
severity[25] = 1; messages[25] = "25: You have specified the Self Ejecting configuration without a retainer!  With this configuration, the \"ejection\" may cause the stud to be pushed out of the panel!";
severity[26] = 1; messages[26] = "26: You have specified the Self Ejecting and a Self Retaining configuration.  This combination is invalid. I am changing the configuration to the Self Retaining Ejecting Assembly!";
severity[27] = 2; messages[27] = "27: The Passivation (PAS) finish can only be applied to Stainless Steel Studs and /or Receptacles!";
severity[28] = 2; messages[28] = "28: Stainless Steel can be specified only for the S-Spring and Weld Plate Receptacles!  Other Stainless Steel Receptacles are available but cannot be sized by this program.  Please call for assistance.";
severity[29] = 2; messages[29] = "29: The Slip-On Receptacle can only be used with a Size 4 or Size 5 Stud!";
severity[30] = 2; messages[30] = "30: The full grommet for the size 3 stud requires a panel thickness between 0.015\" (.38 mm) and 0.094\" (2.39 mm)!";
severity[31] = 2; messages[31] = "31: The full grommet for the size 4 stud requires a panel thickness between 0.015\" (.38 mm) and 0.100\" (2.54 mm)!";
severity[32] = 2; messages[32] = "32: The full grommet for the size 5 stud requires a panel thickness between 0.031\" (.79 mm)  and 0.125\" (3.18 mm)!";
severity[33] = 2; messages[33] = "33: The full grommet for the size 65 stud requires a panel thickness between 0.050\" (1.27 mm) and 0.218\" (5.54 mm)!";
severity[34] = 2; messages[34] = "34: The full grommet is not available for the size 3 Flush Head Stud!";
severity[35] = 2; messages[35] = "35: The full grommet is not available for the size 65 Flush Head Stud!";
severity[36] = 1; messages[36] = "36: The Self Retaining Stud requires Stainless Steel!";
severity[37] = 1; messages[37] = "37: For the Full Grommet, the material thickness under the head has been added to the total pileup!";

if (msgno > numberOfMessages)   alert(messages[0]);
else { switch (severity[msgno]) {
         case 0: { document.inParms.Notes.value = messages[msgno];       break; }
         case 1: { alert("Warning: "+messages[msgno]);                   break; } 
         case 2: { alert("Error: "+messages[msgno]); resetPartNumbers(); break; }
       }
     }
} 
// End of hiding -->
