Home
/
Building Materials
Building Materials
Sort by
Bestsellers
Name: A to Z
Name: Z to A
Price: Low to High
Price: High to Low
Created on
Display
20
50
100
per page
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Add to wishlist
Min:
£0.00
Max:
£456.00
£0
£456
Showing
of
results
// JavaScript Document
let currentUnit = 'metric';
function setUnit(unit) {
currentUnit = unit;
document.getElementById('brick-results').style.display = 'none';
const btnMetric = document.getElementById('btn-metric');
const btnImperial = document.getElementById('btn-imperial');
const selectBox = document.getElementById('brick-size');
const jointInput = document.getElementById('mortar-joint');
if (unit === 'metric') {
btnMetric.classList.add('active');
btnImperial.classList.remove('active');
document.getElementById('label-length').innerText = 'Main Wall Length (metres):';
document.getElementById('label-width').innerText = 'Main Wall Height (metres):';
document.getElementById('wall-length').placeholder = 'e.g. 6';
document.getElementById('wall-height').placeholder = 'e.g. 2.4';
document.getElementById('label-b-length').innerText = 'Unit Length (mm):';
document.getElementById('label-b-height').innerText = 'Unit Height (mm):';
document.getElementById('brick-length').placeholder = 'e.g. 215';
document.getElementById('brick-height').placeholder = 'e.g. 65';
document.getElementById('label-joint').innerText = 'Mortar Joint Thickness (mm):';
jointInput.value = "10";
document.getElementById('label-b-width').innerText = 'Individual Unit Depth / Width (mm):';
} else {
btnImperial.classList.add('active');
btnMetric.classList.remove('active');
document.getElementById('label-length').innerText = 'Main Wall Length (feet):';
document.getElementById('label-width').innerText = 'Main Wall Height (feet):';
document.getElementById('wall-length').placeholder = 'e.g. 20';
document.getElementById('wall-height').placeholder = 'e.g. 8';
document.getElementById('label-b-length').innerText = 'Unit Length (inches):';
document.getElementById('label-b-height').innerText = 'Unit Height (inches):';
document.getElementById('brick-length').placeholder = 'e.g. 8.5';
document.getElementById('brick-height').placeholder = 'e.g. 2.6';
document.getElementById('label-joint').innerText = 'Mortar Joint Thickness (inches):';
jointInput.value = "0.4";
document.getElementById('label-b-width').innerText = 'Individual Unit Depth / Width (inches):';
}
handleSizeChange();
for (let option of selectBox.options) {
if (option.value !== 'custom') {
option.text = unit === 'metric' ? option.getAttribute('data-metric') : option.getAttribute('data-imperial');
}
}
const rows = document.querySelectorAll('.opening-row');
rows.forEach(row => {
const wLabel = row.querySelector('.op-w-label');
const hLabel = row.querySelector('.op-h-label');
wLabel.innerText = unit === 'metric' ? 'Width (m):' : 'Width (ft):';
hLabel.innerText = unit === 'metric' ? 'Height (m):' : 'Height (ft):';
});
}
function handleSizeChange() {
const selectBox = document.getElementById('brick-size');
const val = selectBox.value;
const selectedOption = selectBox.options[selectBox.selectedIndex];
document.getElementById('custom-fields-wrapper').style.display = (val === 'custom') ? 'block' : 'none';
document.getElementById('brick-results').style.display = 'none';
if (val !== 'custom') {
let defaultWidth = parseFloat(selectedOption.getAttribute('data-width'));
if (currentUnit === 'imperial') {
defaultWidth = (defaultWidth / 25.4).toFixed(1);
}
document.getElementById('brick-width').value = defaultWidth;
}
}
function handleOpeningsToggle() {
const isChecked = document.getElementById('toggle-openings').checked;
const container = document.getElementById('openings-fields-wrapper');
container.style.display = isChecked ? 'block' : 'none';
document.getElementById('brick-results').style.display = 'none';
if (isChecked && document.getElementById('openings-list').children.length === 0) {
addOpeningRow();
}
}
function handleMortarToggle() {
const isChecked = document.getElementById('toggle-mortar').checked;
document.getElementById('mortar-fields-wrapper').style.display = isChecked ? 'block' : 'none';
document.getElementById('brick-results').style.display = 'none';
}
function addOpeningRow() {
const list = document.getElementById('openings-list');
const wLabelText = currentUnit === 'metric' ? 'Width (m):' : 'Width (ft):';
const hLabelText = currentUnit === 'metric' ? 'Height (m):' : 'Height (ft):';
const row = document.createElement('div');
row.className = 'opening-row';
row.innerHTML = `
${wLabelText}
${hLabelText}
Remove
`;
list.appendChild(row);
}
function calculateBricks() {
const wallLength = parseFloat(document.getElementById('wall-length').value);
const wallHeight = parseFloat(document.getElementById('wall-height').value);
const selectBox = document.getElementById('brick-size');
const selectedSize = selectBox.value;
const selectedOption = selectBox.options[selectBox.selectedIndex];
const skinMultiplier = parseInt(document.getElementById('wall-skin').value);
const wastageMultiplier = parseFloat(document.getElementById('wastage').value);
const rawJoint = parseFloat(document.getElementById('mortar-joint').value);
if (isNaN(wallLength) || wallLength <= 0 || isNaN(wallHeight) || wallHeight <= 0 || isNaN(rawJoint) || rawJoint < 0) {
alert('Please enter valid positive numbers for main wall dimensions.');
return;
}
// Process subtraction values with physical boundary limit checking loops
let totalOpeningArea = 0;
if (document.getElementById('toggle-openings').checked) {
const widths = document.querySelectorAll('.op-width');
const heights = document.querySelectorAll('.op-height');
const unitLabelText = currentUnit === 'metric' ? 'm' : 'ft';
for (let i = 0; i < widths.length; i++) {
let w = parseFloat(widths[i].value) || 0;
let h = parseFloat(heights[i].value) || 0;
// Direct individual opening dimensional validation checks
if (w > wallLength) {
alert(`Validation Error: Opening #${i+1} width (${w}${unitLabelText}) cannot be wider than the actual wall length (${wallLength}${unitLabelText}).`);
return;
}
if (h > wallHeight) {
alert(`Validation Error: Opening #${i+1} height (${h}${unitLabelText}) cannot be taller than the actual wall height (${wallHeight}${unitLabelText}).`);
return;
}
totalOpeningArea += (w * h);
}
}
let rawWallArea = wallLength * wallHeight;
let netCalculatedArea = rawWallArea - totalOpeningArea;
if (netCalculatedArea <= 0) {
alert('Validation Error: The cumulative surface area of your doors/windows matches or completely exceeds your structural wall area boundary layer.');
return;
}
let bLengthMm = 0;
let bHeightMm = 0;
let jointMm = currentUnit === 'metric' ? rawJoint : rawJoint * 25.4;
let typeLabel = "Units";
if (selectedSize === 'custom') {
const rawLength = parseFloat(document.getElementById('brick-length').value);
const rawHeight = parseFloat(document.getElementById('brick-height').value);
if (isNaN(rawLength) || rawLength <= 0 || isNaN(rawHeight) || rawHeight <= 0) {
alert('Please enter valid positive numbers for custom block dimensions.');
return;
}
bLengthMm = currentUnit === 'metric' ? rawLength : rawLength * 25.4;
bHeightMm = currentUnit === 'metric' ? rawHeight : rawHeight * 25.4;
} else {
const parts = selectedSize.split(',');
bLengthMm = parseFloat(parts[0]);
bHeightMm = parseFloat(parts[1]);
typeLabel = selectedOption.getAttribute('data-type') === 'block' ? 'Blocks' : 'Bricks';
}
const effectiveBrickAreaSqm = ((bLengthMm + jointMm) / 1000) * ((bHeightMm + jointMm) / 1000);
let baseBricksNeeded = 0;
if (currentUnit === 'metric') {
baseBricksNeeded = netCalculatedArea / effectiveBrickAreaSqm;
} else {
const totalNetAreaSqm = netCalculatedArea * 0.092903;
baseBricksNeeded = totalNetAreaSqm / effectiveBrickAreaSqm;
}
const totalBricksFinal = Math.ceil(baseBricksNeeded * skinMultiplier * wastageMultiplier);
document.getElementById('res-area').innerText = netCalculatedArea.toFixed(2);
document.getElementById('res-unit-label').innerText = currentUnit === 'metric' ? 'm²' : 'sq ft';
document.getElementById('res-material-type').innerText = typeLabel;
document.getElementById('res-bricks').innerText = totalBricksFinal.toLocaleString();
if (document.getElementById('toggle-mortar').checked) {
const rawBWidth = parseFloat(document.getElementById('brick-width').value);
if (isNaN(rawBWidth) || rawBWidth <= 0) {
alert('Please enter a valid unit thickness parameter to calculate mortar details.');
return;
}
let bWidthMm = currentUnit === 'metric' ? rawBWidth : rawBWidth * 25.4;
let brickVol = (bLengthMm / 1000) * (bHeightMm / 1000) * (bWidthMm / 1000);
let blockUnitVol = ((bLengthMm + jointMm) / 1000) * ((bHeightMm + jointMm) / 1000) * (bWidthMm / 1000);
let individualMortarVolM3 = blockUnitVol - brickVol;
let totalMortarM3 = individualMortarVolM3 * (baseBricksNeeded * skinMultiplier) * 1.25;
let totalWeightKg = totalMortarM3 * 1800;
let cementKg = totalWeightKg * 0.20;
let sandKg = totalWeightKg * 0.80;
const chosenCementBagSize = parseFloat(document.getElementById('bag-size-cement').value);
const chosenSandBagSize = parseFloat(document.getElementById('bag-size-sand').value);
if (currentUnit === 'metric') {
document.getElementById('res-sand').innerText = Math.ceil(sandKg).toLocaleString();
document.getElementById('res-sand-unit').innerText = 'kg';
document.getElementById('res-cement').innerText = Math.ceil(cementKg).toLocaleString();
document.getElementById('res-cement-unit').innerText = 'kg';
let cementBagsCount = Math.ceil(cementKg / chosenCementBagSize);
let sandUnitsCount = Math.ceil(sandKg / chosenSandBagSize);
document.getElementById('res-cement-bags').innerText = cementBagsCount;
document.getElementById('res-sand-bags').innerText = sandUnitsCount + (chosenSandBagSize >= 850 ? " Bulk Bag(s)" : " Handy Bag(s)");
} else {
let sandLbs = sandKg * 2.20462;
let cementLbs = cementKg * 2.20462;
document.getElementById('res-sand').innerText = Math.ceil(sandLbs).toLocaleString();
document.getElementById('res-sand-unit').innerText = 'lbs';
document.getElementById('res-cement').innerText = Math.ceil(cementLbs).toLocaleString();
document.getElementById('res-cement-unit').innerText = 'lbs';
let imperialCementBagLb = chosenCementBagSize === 25 ? 50 : 90;
let imperialSandBagLb = chosenSandBagSize === 850 ? 2000 : 50;
let cementBagsCount = Math.ceil(cementLbs / imperialCementBagLb);
let sandUnitsCount = Math.ceil(sandLbs / imperialSandBagLb);
document.getElementById('res-cement-bags').innerText = cementBagsCount;
document.getElementById('res-sand-bags').innerText = sandUnitsCount + (imperialSandBagLb >= 2000 ? " Tonne Bulk Bag(s)" : " Handy Bag(s)");
}
document.getElementById('sand-output').style.display = 'block';
document.getElementById('sand-bags-output').style.display = 'block';
document.getElementById('cement-output').style.display = 'block';
document.getElementById('cement-bags-output').style.display = 'block';
} else {
document.getElementById('sand-output').style.display = 'none';
document.getElementById('sand-bags-output').style.display = 'none';
document.getElementById('cement-output').style.display = 'none';
document.getElementById('cement-bags-output').style.display = 'none';
}
document.getElementById('brick-results').style.display = 'block';
}
function resetBricks() {
document.getElementById('wall-length').value = '';
document.getElementById('wall-height').value = '';
document.getElementById('brick-length').value = '';
document.getElementById('brick-height').value = '';
document.getElementById('openings-list').innerHTML = '';
document.getElementById('brick-size').selectedIndex = 0;
document.getElementById('wall-skin').selectedIndex = 0;
document.getElementById('wastage').selectedIndex = 0;
document.getElementById('toggle-openings').checked = false;
document.getElementById('toggle-mortar').checked = false;
document.getElementById('custom-fields-wrapper').style.display = 'none';
document.getElementById('openings-fields-wrapper').style.display = 'none';
document.getElementById('mortar-fields-wrapper').style.display = 'none';
document.getElementById('brick-results').style.display = 'none';
document.getElementById('res-area').innerText = '0';
document.getElementById('res-bricks').innerText = '0';
document.getElementById('res-sand').innerText = '0';
document.getElementById('res-cement').innerText = '0';
setUnit(currentUnit);
}