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

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

var headStyle; var studPart;
var receStyle; var recePart;
var retaStyle; var retaPart; retaThick = 0;
var ejecting ; var hDim    ;
var panel    ;
var gap      ;
var support  ;
var pileup   ;
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() { studPart   = ""; recePart = ""; 
                              retaPart   = ""; valid = false; }

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

resetPartNumbers();
document.inParms.Notes.value = "";
valid = true;

    // Start by determing the head style which was selected.
if      (document.inParms.Head[0].checked) { headStyle=1; }
else if (document.inParms.Head[1].checked) { headStyle=2; }
else if (document.inParms.Head[2].checked) { headStyle=3; }
else if (document.inParms.Head[3].checked) { headStyle=4; }

if      (document.inParms.Ejecting.checked ) { ejecting = true;  }
else                                         { ejecting = false; }

    // Determine the retainer which was selected 
if      (document.inParms.Retainer[0].checked) { retaStyle=1; }
else if (document.inParms.Retainer[1].checked) { retaStyle=2; }
else if (document.inParms.Retainer[2].checked) { retaStyle=3; }

    // Determine the type of receptacle which was selected.
if      (document.inParms.Receptacle[0].checked) { receStyle=1; }
else if (document.inParms.Receptacle[1].checked) { receStyle=2; }
else if (document.inParms.Receptacle[2].checked) { receStyle=3; }
else if (document.inParms.Receptacle[3].checked) { receStyle=4; }

    // 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.
switch (headStyle) {
  case 1 : { document.inParms.studSpec.value = "Straight Slot";   break; }
  case 2 : { document.inParms.studSpec.value = "Wing";            break; }
  case 3 : { document.inParms.studSpec.value = "Slotted Knob";    break; }
  case 4 : { document.inParms.studSpec.value = "Hex (Tool-only)"; break; }
}
if (ejecting) document.inParms.studSpec.value += " / Self Ejecting";
switch (retaStyle) {
  case 1 : { document.inParms.retaSpec.value = "Split"; break; }
  case 2 : { document.inParms.retaSpec.value = "Solid"; break; }
  case 3 : { document.inParms.retaSpec.value = "None";  break; }
}
switch (receStyle) {
  case 1 : { document.inParms.receSpec.value = "Rivet In";                         break; }
  case 2 : { document.inParms.receSpec.value = "High Performance, Back Installed"; break; }
  case 3 : { document.inParms.receSpec.value = "Mini, Back Installed";             break; }
  case 4 : { document.inParms.receSpec.value = "Mini, Top Installed";              break; }
}
setPileText(0,0);

    // do some validation on the input information.
    //   1. A panel thickness is required.  
if (panel   == "") { displayErrorMessage(8); resetPartNumbers(); }
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 support thickness is in the valid range for the part.
if (valid) {
  switch (receStyle) {
    case 1 : { break; }
    case 2 : { if (support < 0.032 || support > 0.165) displayErrorMessage(2);  break; }
    case 3 : { if (support < 0.032 || support > 0.100) displayErrorMessage(3);  break; }
    case 4 : { if (support < 0.035 || support > 0.129) displayErrorMessage(4);  break; }
  }
}

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

    // Set the part numbers in the display
    // if there is an error, the fields will be blank
document.inParms.studPart.value   = studPart; 
document.inParms.retaPart.value   = retaPart;
document.inParms.recePart.value   = recePart;
}


    // This function is to set the receptacle part number.
function setReceptaclePartNumber() {
  recePart = "4604-";
  switch (receStyle) {
    case 1 : { recePart += "001-"; hDim = 0.350; break; }
    case 2 : {
      if (support < 0.032) displayErrorMessage(2);
      else if (support <= 0.050) { recePart += "2-"; hDim = 0.415; }
      else if (support <= 0.080) { recePart += "3-"; hDim = 0.465; }
      else if (support <= 0.104) { recePart += "4-"; hDim = 0.465; }
      else if (support <= 0.135) { recePart += "5-"; hDim = 0.515; }
      else if (support <= 0.165) { recePart += "6-"; hDim - 0.515; }
      else displayErrorMessage(2);
      break; }
    case 3: { hDim = 0.325;
      if (support < 0.032) displayErrorMessage(3);
      else if (support <= 0.050) { recePart += "12-"; hDim = 0.325; }
      else if (support <= 0.100) { recePart += "13-"; hDim = 0.375; }
      else displayErrorMessage(3);
      break; }
    case 4 : { hDim = 0.345;
      if (support < 0.035) displayErrorMessage(4);
      else if (support < 0.049) { recePart += "R11-"; hDim = 0.345; }
      else if (support < 0.069) { recePart += "R12-"; hDim = 0.365; }
      else if (support < 0.089) { recePart += "R13-"; hDim = 0.385; }
      else if (support < 0.109) { recePart += "R14-"; hDim = 0.405; }
      else if (support < 0.129) { recePart += "R15-"; hDim = 0.425; }
      else displayErrorMessage(4)
      break; }
  }
  if (valid) recePart += "BK";
}

    // This function is to set the retainer part number
function setRetainerPart() {
  switch (retaStyle) {
    case 1 : { retaPart = "4604-000-BK"; break; }
    case 2 : { retaPart = "127P-5B";     break; }
    case 3 : { retaPart = "";            break; }
  }
}

    // 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   = 0;
  switch (retaStyle) {
    case 1 : { gMin = 0.045; break; }
    case 2 : { gMin = 0.035; break; }
    case 3 : { gMin = 0;     break; }
  }
  switch (receStyle) {
    case 1 : { gMin += 0;     break; }
    case 2 : { gMin += 0.055; break; }
    case 3 : { gMin += 0.055; break; }
    case 4 : { gMin += 0.045; break; }
  }
  if (gap < gMin) displayErrorMessage(1);
  pileup = (panel * 1000) + (((gap < gMin) ? gMin : gap) * 1000);
       if (receStyle == 1) pileup += support * 1000;
  else if (receStyle == 5) pileup += support * 1000;
  else displayErrorMessage(9);
  if (ejecting) { pileup += 90; displayErrorMessage(6); }
  pileup = parseInt(pileup);
  pileup /= 1000;
  setPileText(pileup,gMin);
}

    // This function is to set the "panel / max(gap,gmin) / support = pileup" display
function setPileText(pileup,gmin) {
  var work = "";
  if (inch) {
    work += panel + " / ";
    if (gmin <= gap) work += gap;
    else             work += "max(" + gap + "," + gmin + ")";
    work += " / " + 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;
    var temp2 = gmin / .03937;
    temp2 = parseInt((temp2 * 100) + .5) / 100;
    if (gmin <= gap) work += temp;
    else             work += "max(" + temp + "," + temp2 + ")";
    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;
    }
    work += " mm";
  }
  document.inParms.pgsSpec.value = work;
}

    // This function is to set the part number for the stud.
function setStudPartNumber () {
  switch (headStyle) {
    case 1 : { studPart = "4604-"; break; } // Slotted
    case 2 : { studPart = "4624-"; break; } // Wing
    case 3 : { studPart = "4644-"; break; } // Slotted Knob
    case 4 : { studPart = "4666-"; break; } // Hex (Tool Only)
  }
  var lDim = (pileup + hDim);
  lDim *= 1000;
  lDim /= 50;
  lDim = parseInt(lDim);
  lDim *= 50;
  lDim /= 1000;
  if (lDim > 1.000) displayErrorMessage(5);
  if (lDim < 0.450) displayErrorMessage(7);
  if (valid) {
    lDim *= 100;
    lDim = parseInt(lDim);
    studPart += lDim;
    if (ejecting) studPart += "-SE";
    studPart += "-BK";
  }
}

    // This function is to display error messages as alerts.
function displayErrorMessage(msgno) {
var messages = new Array();
var severity = new Array();
var numberOfMessages = 10;
severity[ 0] = 2; messages[ 0] = "0. Undefined message number [" + msgno + "] was requested";
severity[ 1] = 1; messages[ 1] = "1. The gap which you specified is inusfficient for the retainer and/or the receptacle which was selected.  The calculated minimum gap will be used for the pileup calculation.";
severity[ 2] = 2; messages[ 2] = "2. The support thickness for the Snap-In, Back Installed, High Performance Receptacle must be between 0.032\" (0.81 mm) and 0.165\" (4.19 mm).";
severity[ 3] = 2; messages[ 3] = "3. The support thickness for the Mini Snap-In, Back Installed Receptacle must be between 0.032\" (0.81 mm) and 0.100\" (2.54 mm).";
severity[ 4] = 2; messages[ 4] = "4. The support thickness for the Mini Snap-In, Top Installed Receptacle must be between 0.035\" (0.89 mm) and 0.129\" (3.28 mm).";
severity[ 5] = 2; messages[ 5] = "5. The maximum stud length is 1.00 \" (25.40 mm).  The stud length required for your configuration is greater than this maximum!";
severity[ 6] = 0; messages[ 6] = "6. You have specified the Self Ejecting configuration.  To support this, 0.090\" (2.29 mm) has been added to the total pileup for the cup and spring!";
severity[ 7] = 2; messages[ 7] = "7. The minimum stud length is 0.45\" (11.43 mm).  The stud length required for your configuration is less than this minimum!";
severity[ 8] = 2; messages[ 8] = "8. A panel thickness is required.";
severity[ 9] = 1; messages[ 9] = "9. The support thickness is used in the calculation of the pileup for the Riveted Receptacle only!";

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