// Blocklayer.com 2005
function SetCalc()
{	
	CalcCenters();
}
var studs = 0;
var centers = 0;
var actualCenters = 0;
var actualCentersLevel = 0;
var spaces = 0;
var space = 0;
var spaceLevel = 0;
var run = 0;
var runDesc = "";
var length = 0;
var studWidth = 0;
var useSpaces = true;
var angle = 0;
var rangle = 0;
function CalcCenters()
{
	length = parseFloat(document.getElementById("txtWallLength").value);
	studWidth = parseFloat(document.getElementById("txtStudWidth").value);
	centers = parseFloat(document.getElementById("txtCenters").value);
    if (centers < studWidth || centers > 10000)
	{
		document.getElementById("txtCenters").style.backgroundColor = "red";
		if (useSpaces)
		    alert("Spaces too small or large\n\r\n\rMin = 20\n\rMax = 10000");
		else
		    alert("Centres too small or large\n\r\n\rMin = Member width ("+ studWidth +")\n\rMax = 10000");
		document.getElementById("txtCenters").style.backgroundColor = "";
		document.getElementById("txtCenters").focus();
		return;
	}
	if (length < 1000 || length > 100000)
	{
		document.getElementById("txtWallLength").style.backgroundColor = "red";
		alert("Length must be at least 1000 and no larger than 100000");
		document.getElementById("txtWallLength").style.backgroundColor = "";
		document.getElementById("txtWallLength").focus();
		return;
	}
	if (studWidth < 20 || studWidth > 200)
	{
		document.getElementById("txtStudWidth").style.backgroundColor = "red";
		alert("Member width must be at least 20 and no larger than 200");
		document.getElementById("txtStudWidth").style.backgroundColor = "";
		document.getElementById("txtStudWidth").focus();
		return;
	}
	if (length / centers > 400)
	{
		alert("Wall to long or centres to short");
		return;
	}
    var rad = 180 / Math.PI;
    angle = parseFloat(document.getElementById("_txtAngle").value);
    if (isNaN(angle) || angle > 89 || angle < 0)
    {
        angle = 0;
        document.getElementById("_txtAngle").value = "0";
        alert("Invalid angle\n\r\n\rReset to 0"); 
    }
    rangle = angle / rad;
    centers = centers / (Math.cos(rangle)); // new centers for angle
    studWidth = studWidth / (Math.cos(rangle));
    if (useSpaces)
	    centers += studWidth;
	var desc = "";
	if (document.getElementById("rbBothEnds").checked)
	{
		actualCenters = (length - studWidth) / Math.ceil((length - studWidth) / centers);
		space = actualCenters - studWidth;
		studs = Math.ceil(((length - studWidth) / actualCenters)) +1;
		spaces = studs - 1;
		desc = "Members both ends<br />";
		run = studWidth;
		runDesc = Math.round(studWidth).toString();
	}
	else if (document.getElementById("rbOneEnd").checked)
	{
		actualCenters = length / Math.ceil(length / centers);
		space = actualCenters - studWidth;
		studs = Math.ceil(((length - studWidth) / actualCenters));
		spaces = studs;
		desc = "Member one end only. Work from member end<br />";
		run = studWidth;
		runDesc = "Working from member end<br />"+ Math.round(studWidth).toString();
	}
	else
	{
		var adj = length + studWidth;
		actualCenters = adj / Math.ceil(adj / centers);
		space = actualCenters - studWidth;
		studs = Math.ceil(adj  / actualCenters)-1;
		spaces = studs + 1;
		desc = "No end members<br />";
		run = space + studWidth;
		runDesc = Math.round(run).toString();
	}
	actualCentersLevel = actualCenters * Math.cos(rangle);
    spaceLevel = space * Math.cos(rangle);
	desc += GetDesc();
	if (angle >0)
        runDesc = "Adjusted for angle "+ angle +"&deg;<br />" + runDesc;
	runDesc += GetRunDesc();
	document.getElementById("spnCenters").innerHTML = desc;
	document.getElementById("spnCentersRun").innerHTML = runDesc;
}
function GetDesc()
{
    var des = studs +" members at "+ RoundTo(actualCentersLevel, 1) +" centres";
    if (angle > 0)
        des +=" (level)";
    des += "<br />"+ spaces +" spaces @ "+ RoundTo(spaceLevel, 1);
    if (angle > 0)
        des += " (level)";
    des += "<br />";
    return des;
}
function GetRunDesc()
{    
    var des = "";
    for (var i=0; i<(studs-1); i++)
	{
		run += actualCenters;
		des += ", "+ Math.round(run).toString();
	} 
	return des;
}
function ShowCenters(rb)
{
	document.images["imgCenters"].src = "images/"+ rb.id +".gif";
	CalcCenters();
}
function RoundTo(val, places)
{
    places = Math.pow(10, places);
    d = Math.round(val * places) / places;
    return d;
}
function AddStud(d)
{    
    if (studs < 3 && d == -1)
    {
        alert("Must have at least 3 Members");
        return;
    }
    if (space < 20 && d == 1)
    {
        alert("Openings to small")
        return;
    }
    studs += d;
    var desc = "";
    if (document.getElementById("rbBothEnds").checked)
	{
		space = (length - (studs * studWidth)) / (studs - 1);
		spaces = studs - 1;
		run = studWidth;
		desc = "Members both ends<br />";
		runDesc = Math.round(studWidth).toString();
	}
	else if (document.getElementById("rbOneEnd").checked)
	{
	    space = (length - (studs * studWidth)) / studs;
	    spaces = studs;
	    run = studWidth;
	    desc = "Member one end only. Work from member end<br />";
		runDesc = "Working from Member end<br />"+ Math.round(studWidth).toString();
	}
	else
	{
	    space = (length - (studs * studWidth)) / (studs + 1);
		spaces = studs + 1;
		run = space + studWidth;
	    desc = "No end Mmembers<br />";
	    runDesc = Math.round(space + studWidth).toString();
	}
	actualCenters = space + studWidth; 
	actualCentersLevel = actualCenters * Math.cos(rangle);
    spaceLevel = space * Math.cos(rangle);
	desc += GetDesc();
	if (angle > 0)
        runDesc = "Adjusted for angle "+ angle +"&deg;<br />" + runDesc;
	runDesc += GetRunDesc();
	document.getElementById("spnCenters").innerHTML = desc;
	document.getElementById("spnCentersRun").innerHTML = runDesc;
}
function TypeChange(ctrl)
{
    useSpaces = ctrl.value == "Spaces";
    CalcCenters();
}
