﻿var totalWidth, totalLength, optGap, boardWidth, boardAndGap, rem, boards, allGaps, actualGap, linealBoards, minLast, boardLength, joistSpacing; function SetDeck() { minLast = 32; CalcDeck(); } function CalcDeck() { totalWidth = parseInt(document.getElementById("ddTotalWidthFeet").value) * 384 + parseInt(document.getElementById("ddTotalWidthInches").value) * 32 + parseInt(document.getElementById("ddTotalWidthFrac").value); totalLength = parseInt(document.getElementById("ddTotalLengthFeet").value) * 384 + parseInt(document.getElementById("ddTotalLengthInches").value) * 32 + parseInt(document.getElementById("ddTotalLengthFrac").value); optGap = parseInt(document.getElementById("ddOptGapFrac").value); boardWidth = parseInt(document.getElementById("ddBoardWidthInches").value) * 32 + parseInt(document.getElementById("ddBoardWidthFrac").value); boardLength = parseInt(document.getElementById("ddBoardLengthFeet").value) * 384 + parseInt(document.getElementById("ddBoardLengthInches").value) * 32; joistSpacing = parseInt(document.getElementById("ddJoistSpacingInches").value) * 32; boards = Math.floor((totalWidth + optGap) / (boardWidth + optGap)); allGaps = totalWidth - (boards * boardWidth); actualGap = allGaps / (boards - 1); boardAndGap = boardWidth + actualGap; document.getElementById("btnSubBoard").disabled = false; document.getElementById("btnAddBoard").disabled = false; document.getElementById("btnCutLast").disabled = false; UpdateResults(0); } function Board(d) { if (d == 1) { if (allGaps > boardWidth) boards++; else { document.getElementById("btnAddBoard").disabled = true; alert("Won't Fit"); return; } } else { if (actualGap < 20) boards--; else { document.getElementById("btnSubBoard").disabled = true; alert("Gaps are too large"); return; } } allGaps = totalWidth - (boards * boardWidth); actualGap = allGaps / (boards - 1); boardAndGap = boardWidth + actualGap; linealBoards = boards * totalLength; document.getElementById("btnSubBoard").disabled = false; document.getElementById("btnAddBoard").disabled = false; document.getElementById("btnCutLast").disabled = false; UpdateResults(0); } function UpdateResults(lastBoard) { DoRun(); linealBoards = boards * totalLength; document.getElementById("spnBoards").innerHTML = boards; document.getElementById("spnGap").innerHTML = ConEng(actualGap, false) + " (" + RoundTo(actualGap / 32, 2) + "&quot;)"; document.getElementById("spnLineal").innerHTML = ConEng(linealBoards, true); var wastePercent = parseFloat(document.getElementById("ddWaste").value); var linealPlus = linealBoards + (linealBoards * wastePercent / 100); document.getElementById("spnLinealPlus").innerHTML = Math.ceil(linealPlus / 384) + "'"; document.getElementById("spnPercentWaste").innerHTML = wastePercent; document.getElementById("spnBoardLength").innerHTML = ConEng(boardLength, true); var totalBoards = Math.ceil(linealPlus / boardLength); document.getElementById("spnTotalBoards").innerHTML = totalBoards; var joists = Math.ceil(totalLength / joistSpacing) + 1; document.getElementById("spnJoists").innerHTML = joists; var fasteners = (joists * boards * 2); if (totalLength > boardLength) fasteners += (totalBoards * 2); document.getElementById("spnFasteners").innerHTML = fasteners; var desc = ""; if (lastBoard == 0) desc = boards + " Courses @ " + ConEng(boardWidth, false) + " wide, with " + (boards - 1) + " gaps of " + ConEng(actualGap, false); else { desc = (boards - 1) + " Courses @ " + ConEng(boardWidth, false) + " wide + 1 @ " + ConEng(lastBoard, false) + " wide, with " + (boards - 1) + " gaps of " + ConEng(actualGap, false); document.getElementById("spnBoards").innerHTML += " (Last Board = " + ConEng(lastBoard, false) + ")"; } desc += "<br />" + totalBoards + " Boards @ " + ConEng(boardLength, true) + " long (includes " + wastePercent + " % waste)"; document.getElementById("spnDesc").innerHTML = desc; } function DoRun() { var running = ""; var r = 0; var everyXth = document.getElementById("cbEveryBoard").checked; var everyX = document.getElementById("ddEveryBoard").value; for (var i = 0; i < boards - 1; i++) { r += boardAndGap; if (i % everyX == (everyX - 1)) running += "<span class=\"CalcAnswers2\">" + ConEng(r, true) + "</span>, "; else if (!everyXth) running += ConEng(r, true) + ", "; } running = running.substring(0, running.length - 2); document.getElementById("spnBoardRun").innerHTML = running; } function CutLast() { var lastBoard = Math.round(totalWidth % (boardWidth + optGap)); if (lastBoard > 0) boards = Math.ceil(totalWidth / boardAndGap); if (lastBoard < minLast) { if (confirm("With " + ConEng(optGap, false) + " gaps, the last board width is too small (" + ConEng(lastBoard, false) + ")\n\r\n\rWould you like to adjust gaps for min last board = " + ConEng(minLast, false) + " ?")) { var adj = minLast - lastBoard; actualGap -= (adj / (boards - 1)); boardAndGap = boardWidth + actualGap; lastBoard = minLast; } else return; } actualGap = optGap; boardAndGap = boardWidth + actualGap; document.getElementById("btnAddBoard").disabled = true; document.getElementById("btnCutLast").disabled = true; UpdateResults(Math.round(lastBoard)); } function Reset() { CalcDeck(); } function RoundTo(val, places) { places = Math.pow(10, places); d = Math.round(val * places) / places; return d; }