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

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

var headStyle; var studPartDzus; var studPartDFCI; 
var studSize ; var studSizeDFCI;
var receStyle; var recePartDzus; var recePartDFCI; var receHDim;
var retaStyle; var retaPartDzus; var retaPartDFCI; var retaThick = 0; 
var panel    ; var gap     ; var support  ;     var pileup   ;
var undercut   = "";
var deflection = "";
var valid = true;
var inch  = true;

// 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();
valid = true;

    // Determine the size which was selected. 
if      (document.inParms.Size[0].checked) { studSize  = 6;  studSizeDFCI = "60"; }
else if (document.inParms.Size[1].checked) { studSize  = 5;  studSizeDFCI = "50"; }
else if (document.inParms.Size[2].checked) { studSize  = 35; studSizeDFCI = "35"; }

     // Get the finish suffix for the stud
  studFinish = "";
  for (i = 0 ; i < document.inParms.stuFinish.length ; ++i ) {
    if (document.inParms.stuFinish[i].checked) {
      studFinish = document.inParms.stuFinish[i].value;
    }
  }
     // Get the finish suffix for the receptacle
  receptacleFinish = "";
  for (i = 0 ; i < document.inParms.recFinish.length ; ++i ) {
    if (document.inParms.recFinish[i].checked) {
      receptacleFinish = document.inParms.recFinish[i].value;
    }
  }

    // Next, determe the head style which was selected.
if      (document.inParms.Head[0].checked) { 
         headStyle="Oval";      
         studPartDzus="A" + studSize;  
         studPartDFCI="2" + studSizeDFCI + "1-"; 
}
else if (document.inParms.Head[1].checked) { 
         headStyle="Flush";     
         studPartDzus="F" + studSize;  
         studPartDFCI="2" + studSizeDFCI + "6-"; 
}
else if (document.inParms.Head[2].checked) { 
         headStyle="Oval Wing"; 
         studPartDzus="AW" + studSize; 
         studPartDFCI="2" + studSizeDFCI + "1-W"; 
}

    // 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="Stainless Steel Snap Ring";
  retaPartDzus="SR";
  retaPartDFCI="1219-R";
}

    // Determine the type of receptacle which was selected.
if      (document.inParms.Receptacle[0].checked) { 
         receStyle="Rigid";    
         recePartDzus="R";  
         recePartDFCI = "2" + studSizeDFCI + "0-18";
}
else if (document.inParms.Receptacle[1].checked) { 
         receStyle="Floating"; 
         recePartDzus="RF"; 
         recePartDFCI = "2" + studSizeDFCI + "0-18F";
}

    // 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;
document.inParms.retaSpec.value = retaStyle;
document.inParms.receSpec.value = receStyle;
setPileText(0,0);

    // do some validation on the input information.
    //   1. A panel thickness is required.  
if (panel   == "") displayErrorMessage(1); 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;
}

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

    // 5. Check to see if the total pileup for the part is in the valid range.
if (valid) {
  switch (studSize) {
    case 35: { if (pileup <= 0.000 || pileup >= 0.390) displayErrorMessage(6); break; }
    case 5 : { if (pileup <= 0.021 || pileup >= 0.440) displayErrorMessage(7); break; }
    case 6 : { if (pileup <= 0.021 || pileup >= 0.500) displayErrorMessage(8); break; }
  }
}

    // 6. Set the receptacle part number.
if (valid) {
  setReceptacleParms();
  if (valid) {
    switch (studSize) {
      case 35 : { setSize35(); break; }
      case 5  : { setSize5();  break; }
      case 6  : { setSize6();  break; }
    }
        // Determine the finish suffix
  }
}
    // Set the receptacle part number for the display
if (valid) setReceptaclePartNumber();


    // 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;
}


    // This function is to set the receptacle part number.
function setReceptaclePartNumber() {
  recePartDzus += studSize;
  if (recePartDzus.substring(0,2) == "RF") {
    if ((studSize == 35) && (support < 0.032)) {
      recePartDzus += " x 734 & RF35 x 734-1 (2)";
      recePartDFCI += "-24734 & 2350-18F-24734-1 (2)";
    }
    else {
      recePartDzus += " & RF"+studSize+"-5 (2)";
      recePartDFCI += "-" + receptacleFinish + " & 2"+studSizeDFCI+"0-18F-5-"+receptacleFinish+" (2)";
    }
  }
  else {
    recePartDFCI += "-" + receptacleFinish;
  }
}

    // 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 35 : { if ((recePartDzus ==  "R") || (recePartDzus == "RF")) receHDim = 0.275;
                else displayErrorMessage(3);
                break; }
    case 5  : { if ((recePartDzus ==  "R") || (recePartDzus == "RF")) receHDim = 0.350;
                else displayErrorMessage(4);
                break; }
    case 6  : { if ((recePartDzus ==  "R") || (recePartDzus == "RF")) receHDim = 0.425;
                else displayErrorMessage(5);
                break; }
  }
}

    // This function is to set the retainer part number
function setRetainerPart() {
  var add = "";
  retaThick = 0;
  if (retaPartDzus != "") {
    if (retaPartDzus == "GH")
      switch (studSize) {
        case 35 : { retaThick = .015; break; }
        case 5  : { retaThick = .031; break; }
        case 6  : { retaThick = .031; break; }
      }
    if (retaPartDzus == "SR") {
      add = "SS";
      switch (studSize) {
        case 35 : { retaThick = .022; break; }
        case 5  : { retaThick = .035; break; }
        case 6  : { retaThick = .043; break; }
      }
    }
    retaPartDzus += studSize + add;
    retaPartDFCI += studSize + add;
  }
}

    // 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 gMin = 0;        
  pileup   = panel + gap + support;
  pileup *= 1000;
  pileup = parseInt(pileup);
  pileup /= 1000;
  setPileText(pileup);
}

    // This function is to set the "panel / gap / support = pileup" display
function setPileText(pileup) {
  var work = "";
  if (inch) {
    work = panel + " / " + gap + " / " + support;
    if (pileup > 0) work += " = " + pileup;
  }
  else {
    var temp = panel / .03937;
    temp = parseInt((temp * 100) + .5) / 100;
    work += temp + " / ";
    temp = gap / .03937;
    temp = parseInt((temp * 100) + .5) / 100;
    work += temp + " / "; 
    temp = support / .03937;
    temp = parseInt((temp * 100) + .5) / 100;
    work += temp;
    if (pileup > 0) { 
      temp = pileup / .03937;
      temp = parseInt((temp * 100) + .5) / 100;
      work += " = " + temp + " mm";
    }
  }
  document.inParms.pgsSpec.value = work;
}

    // This function is to set the part number for the size 35 stud.
function setSize35 () {
  var d   = new Array();
      d[ 0] =  "3"; d[ 1] =  "6"; d[ 2] =  "9"; d[ 3] = "12"; d[ 4] = "15";  
      d[ 5] = "18"; d[ 6] = "21"; d[ 7] = "24"; d[ 8] = "27"; d[ 9] = "30"; 
      d[10] = "33"; d[11] = "36"; d[12] = "39";
  var l   = new Array();
      l[ 0] = 0.260; l[ 1] = 0.290; l[ 2] = 0.320; l[ 3] = 0.350; l[ 4] = 0.380;  
      l[ 5] = 0.410; l[ 6] = 0.440; l[ 7] = 0.470; l[ 8] = 0.500; l[ 9] = 0.530; 
      l[10] = 0.560; l[11] = 0.590; l[12] = 0.620;
  var b   = new Array();
      b[ 0] = 0.130; b[ 1] = 0.170; b[ 2] = 0.170; b[ 3] = 0.210; b[ 4] = 0.250; 
      b[ 5] = 0.290; b[ 6] = 0.290; b[ 7] = 0.330; b[ 8] = 0.370; b[ 9] = 0.410; 
      b[10] = 0.410; b[11] = 0.450; b[12] = 0.490;
  var match = false;
  for ( i = 0 ; i < 13 && !match ; ++i ) {
    lLim = l[i] - receHDim + 0.016;
    uLim = l[i] - receHDim + 0.045;
    if ( pileup >= lLim && pileup <= uLim ) {
      if (b[i] > (panel + retaThick)) {
        studPartDzus += "T" + d[i];
        if (studPartDFCI.substring(studPartDFCI.length-1,studPartDFCI.length) != "-") {
          studPartDFCI += "-";
        }
        studPartDFCI += "20-" + d[i] + "-" + studFinish;
        undercut = b[i];
        deflection = (pileup - l[i] + receHDim) * 1000 + .5;
        deflection = parseInt(deflection);
        deflection /= 1000;
        if (inch) {
          deflection = "0.016 / 0.045 / " + deflection;
        }
        else {
          var temp = deflection / .03937;
          temp = parseInt((temp * 100) + .5) / 100;
          deflection = "0.41 / 1.14 / " + temp + " mm";
        }
        match = true;
      }
    }
  }
  if (!match) displayErrorMessage(2);
}

    // This function is to set the part number for the size 5 stud.
function setSize5 () {
  var d   = new Array();
      d[ 0] =  "5"; d[ 1] =  "8"; d[ 2] = "11"; d[ 3] = "14"; d[ 4] = "17";  
      d[ 5] = "20"; d[ 6] = "23"; d[ 7] = "26"; d[ 8] = "29"; d[ 9] = "32"; 
      d[10] = "35"; d[11] = "38"; d[12] = "41"; d[13] = "44";
  var l   = new Array();
      l[ 0] = 0.350; l[ 1] = 0.380; l[ 2] = 0.410; l[ 3] = 0.440; l[ 4] = 0.470;  
      l[ 5] = 0.500; l[ 6] = 0.530; l[ 7] = 0.560; l[ 8] = 0.590; l[ 9] = 0.620; 
      l[10] = 0.650; l[11] = 0.680; l[12] = 0.710; l[13] = 0.740;
  var b   = new Array();
      b[ 0] = 0.170; b[ 1] = 0.210; b[ 2] = 0.250; b[ 3] = 0.250; b[ 4] = 0.290; 
      b[ 5] = 0.330; b[ 6] = 0.370; b[ 7] = 0.370; b[ 8] = 0.410; b[ 9] = 0.450; 
      b[10] = 0.490; b[11] = 0.490; b[12] = 0.530; b[13] = 0.570;
  var match = false;
  for ( i = 0 ; i < 14 && !match ; ++i ) {
    lLim = l[i] - receHDim + 0.021;
    uLim = l[i] - receHDim + 0.050;
    if ( pileup >= lLim && pileup <= uLim ) {
      if (b[i] > (panel + retaThick)) {
        studPartDzus += "T" + d[i];
        if (studPartDFCI.substring(studPartDFCI.length-1,studPartDFCI.length) != "-") {
          studPartDFCI += "-";
        }
        studPartDFCI += "20-" + d[i] + "-" + studFinish;
        undercut = b[i];
        deflection = (pileup - l[i] + receHDim) * 1000 + .5;
        deflection = parseInt(deflection);
        deflection /= 1000;
        if (inch) {
          deflection = "0.021 / 0.050 / " + deflection;
        }
        else {
          var temp = deflection / .03937;
          temp = parseInt((temp * 100) + .5) / 100;
          deflection = "0.53 / 1.27 / " + temp + " mm";
        }
        match = true;
      }
    }
  }
  if (!match) displayErrorMessage(2);
}

    // This function is to set the part number for the size 6 stud.
function setSize6 () {
  var d   = new Array();
      d[ 0] =  "5"; d[ 1] =  "8"; d[ 2] = "11"; d[ 3] = "14"; d[ 4] = "17";  
      d[ 5] = "20"; d[ 6] = "23"; d[ 7] = "26"; d[ 8] = "29"; d[ 9] = "32"; 
      d[10] = "35"; d[11] = "38"; d[12] = "41"; d[13] = "44"; d[14] = "47";
      d[15] = "50";
  var l   = new Array();
      l[ 0] = 0.410; l[ 1] = 0.440; l[ 2] = 0.470; l[ 3] = 0.500; l[ 4] = 0.530;  
      l[ 5] = 0.560; l[ 6] = 0.590; l[ 7] = 0.620; l[ 8] = 0.650; l[ 9] = 0.680; 
      l[10] = 0.710; l[11] = 0.740; l[12] = 0.770; l[13] = 0.800; l[14] = 0.830; 
      l[15] = 0.860;
  var b   = new Array();
      b[ 0] = 0.180; b[ 1] = 0.230; b[ 2] = 0.280; b[ 3] = 0.280; b[ 4] = 0.330; 
      b[ 5] = 0.330; b[ 6] = 0.380; b[ 7] = 0.430; b[ 8] = 0.430; b[ 9] = 0.480; 
      b[10] = 0.480; b[11] = 0.530; b[12] = 0.580; b[13] = 0.580; b[14] = 0.630; 
      b[15] = 0.630;
  var match = false;
  for ( i = 0 ; i < 16 && !match ; ++i ) {
    lLim = l[i] - receHDim + 0.036;
    uLim = l[i] - receHDim + 0.065;
    if ( pileup >= lLim && pileup <= uLim ) {
      if (b[i] > (panel + retaThick)) {
        studPartDzus += "T" + d[i];
        if (studPartDFCI.substring(studPartDFCI.length-1,studPartDFCI.length) != "-") {
          studPartDFCI += "-";
        }
        studPartDFCI += "20-" + d[i] + "-" + studFinish;
        undercut = b[i];
        deflection = (pileup - l[i] + receHDim) * 1000 + .5;
        deflection = parseInt(deflection);
        deflection /= 1000;
        if (inch) {
          deflection = "0.036 / 0.065 / " + deflection;
        }
        else {
          var temp = deflection / .03937;
          temp = parseInt((temp * 100) + .5) / 100;
          deflection = "0.91 / 1.65 / " + temp + " mm";
        }
        match = true;
      }
    }
  }
  if (!match) displayErrorMessage(2);
}

    // This function is to display error messages as alerts.
function displayErrorMessage(msgno) {
var messages = new Array();
var severity = new Array();
var numberOfMessages = 8;
severity[ 0] = 2; messages[ 0] = "Undefined message number [" + msgno + "] was requested";
severity[ 1] = 2; messages[ 1] = "A Panel Thickness is required!";
severity[ 2] = 2; messages[ 2] = "I am unable to find a stud which will fit your requirements!\n\nPlease call for assistance.";
severity[ 3] = 2; messages[ 3] = "Size 35 Studs support Rigid and Floating Receptacles only!";
severity[ 4] = 2; messages[ 4] = "Size 5 Studs support Rigid and Floating Receptacles only!";
severity[ 5] = 2; messages[ 5] = "Size 6 Studs support Rigid and Floating Receptacles only!";
severity[ 6] = 2; messages[ 6] = "The total pileup for the Size 35 stud must be between 0.000\" (0.00 mm) and 0.390\" (9.91 mm)!";
severity[ 7] = 2; messages[ 7] = "The total pileup for the Size 5 stud must be between 0.021\" (0.53 mm) and 0.440\" (11.18 mm)!";
severity[ 8] = 2; messages[ 8] = "The total pileup for the Size 6 stud must be between 0.021\" (0.53 mm) and 0.500\" (12.70 mm)!";

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 -->
