//custom constructor for Projector Data object
function projRecord(projName, Tmin, Tmax, PDmin){
	this.projName = projName;
	this.Tmin = Tmin;
	this.Tmax = Tmax;
	this.PDmin = PDmin;
}

//Load array with Name, Tmin, Tmax, & PDmin for each projector model.  Units for PDmin is inches
var projData = new Array();

//Calculation mode switch, true->use screen size; false->use projector distance
var calcBySize = true;

//Skeleton HTML for results based on screen size
var resultsSizeHTML = '<table width="100%" class="formBody" border="0">';
resultsSizeHTML += '<tr><td colspan=3 class="formBold"> For a 4:3 Format</td></tr>';
resultsSizeHTML += '<tr><td colspan=3 class="formBold"> Image Size: </td></tr>';
resultsSizeHTML += '<tr class="formBodyItalic"><td>&nbsp;</td><td>Feet</td><td>Inches</td></tr>';
resultsSizeHTML += '<tr><td>';
resultsSizeHTML += '<table width="100%" class="formBodyItalic" border="0">';
resultsSizeHTML += '<tr><td>Height:</td></tr><tr><td> Width:</td></tr><tr><td> Diagonal:</td></tr>';
resultsSizeHTML += '</table></td>';
resultsSizeHTML += '<td colspan="2">';
resultsSizeHTML += '<table width="100%" class="formBody" border="1">';
resultsSizeHTML += '<tr><td><span ID="HTf">&nbsp;</span></td><td><span ID="HTi">&nbsp;</span></td></tr>';
resultsSizeHTML += '<tr><td><span ID="WDf">&nbsp;</span></td><td><span ID="WDi">&nbsp;</span></td></tr>';
resultsSizeHTML += '<tr><td><span ID="DIf">&nbsp;</span></td><td><span ID="DIi">&nbsp;</span></td></tr>';
resultsSizeHTML += '</table></td>';
resultsSizeHTML += '<tr><td colspan=3 class="formBold"> Distance from Screen:</td></tr>';
resultsSizeHTML += '<tr class="formBodyItalic"><td>&nbsp;</td><td>Feet</td><td>Inches</td></tr>';
resultsSizeHTML += '<tr><td>';
resultsSizeHTML += '<table width="100%" class="formBodyItalic" border="0">';
resultsSizeHTML += '<tr><td>Minimum</td></tr><tr><td>Maximum</td></tr>';
resultsSizeHTML += '</table></td>';
resultsSizeHTML += '<td colspan="2"><table width="100%" class="formBody" border="1">';
resultsSizeHTML += '<tr><td><span ID="MINf">&nbsp;</span></td><td><span ID="MINi">&nbsp;</span></td></tr>';
resultsSizeHTML += '<tr><td><span ID="MAXf">&nbsp;</span></td><td><span ID="MAXi">&nbsp;</span></td></tr>';
resultsSizeHTML += '</table></td></tr>';
resultsSizeHTML += '<tr><td colspan=3><span ID="Notes">&nbsp;</span></td></tr>';
resultsSizeHTML += '</table>';

//Skeleton HTML for results based on projector distance
var resultsDistanceHTML = '<table width="100%" class="formBody" border="0">';
resultsDistanceHTML += '<tr><td colspan=5 class="formBold"> For a 4:3 Format</td></tr>';
resultsDistanceHTML += '<tr class="formBodyItalic"><td colspan=3>&nbsp;</td><td>Feet</td><td>Inches</td></tr>';
resultsDistanceHTML += '<tr><td colspan=3 class="formBold">Distance from Screen:</td>';
resultsDistanceHTML += '<td colspan="2">';
resultsDistanceHTML += '<table width="100%" border="1" class="formBody">';
resultsDistanceHTML += '<tr><td><span ID="DISf">&nbsp;</span></td><td><span ID="DISi">&nbsp;</span></td></tr>';
resultsDistanceHTML += '</table></td></tr>';
resultsDistanceHTML += '<tr><td colspan=5 class="formBold">Image Size:</td></tr>';
resultsDistanceHTML += '<tr class="formBodyItalic"><td>&nbsp;</td><td colspan=2>Minimum</td><td colspan=2>Maximum</td></tr>';
resultsDistanceHTML += '<tr class="formBodyItalic"><td>&nbsp;</td><td>Feet</td><td>Inches</td><td>Feet</td><td>Inches</td></tr>';
resultsDistanceHTML += '<tr><td><table width="100%" border="0" class="formBodyItalic">';
resultsDistanceHTML += '<tr><td>Height:</td></tr><tr><td>Width:</td></tr><tr><td>Diagonal:</td></tr></table></td>';
resultsDistanceHTML += '<td colspan="4"><table width="100%" border="1" class="formBody">';
resultsDistanceHTML += '<tr><td><span ID="MINHf">&nbsp;</span></td><td><span ID="MINHi">&nbsp;</span></td><td><span ID="MAXHf">&nbsp;</span></td><td><span ID="MAXHi">&nbsp;</span></td></tr>';
resultsDistanceHTML += '<tr><td><span ID="MINWf">&nbsp;</span></td><td><span ID="MINWi">&nbsp;</span></td><td><span ID="MAXWf">&nbsp;</span></td><td><span ID="MAXWi">&nbsp;</span></td></tr>';
resultsDistanceHTML += '<tr><td><span ID="MINDf">&nbsp;</span></td><td><span ID="MINDi">&nbsp;</span></td><td><span ID="MAXDf">&nbsp;</span></td><td><span ID="MAXDi">&nbsp;</span></td></tr>';
resultsDistanceHTML += '</table></td></tr>';
resultsDistanceHTML += '<tr><td colspan=5><span ID="Notes">&nbsp;</span></td></tr>';

var diagramHTML = '<img src="images/proCalc.gif" width="355" height="268">'

// Convert location.search into an array of values
// indexed by name.
function getSearchAsArray() {
	var minNav3 = (navigator.appName == "Netscape" && 
parseInt(navigator.appVersion) >= 3)
	var minIE4 = (navigator.appName.indexOf("Microsoft") >= 0 && parseInt(navigator.appVersion) >= 4)
	var minDOM = minNav3 || minIE4   // baseline DOM required for this function
	var results = new Array()
	if (minDOM) {
		var input = unescape(location.search.substr(1))
		if (input) {
			var srchArray = input.split("&")
			var tempArray = new Array()
			for (var i = 0; i < srchArray.length; i++) {
				tempArray = srchArray[i].split("=")
				results[tempArray[0]] = tempArray[1]
			}
		}
	}
	return results
}

//function, called by onLoad event, loads up projData array and frmProjector dropdown
function pageLoader() {
var searchArray = new Array();
searchArray=getSearchAsArray();
var i = 0;
projData[i++] = new projRecord("ImagePro 7300", 1.89, 2.27, 60);
projData[i++] = new projRecord("ImagePro 8055", 1.5, 1.8, 47);
projData[i++] = new projRecord("ImagePro 8063", 1.5, 1.8, 35);
projData[i++] = new projRecord("ImagePro 8064", 1.8, 1.8, 60);
projData[i++] = new projRecord("ImagePro 8065", 1.52, 1.86, 36);
projData[i++] = new projRecord("ImagePro 8070", 1.5, 1.8, 29);
projData[i++] = new projRecord("ImagePro 8746A", 1.8, 2.4, 60);
projData[i++] = new projRecord("ImagePro 8755C", 1.5, 1.8, 35);
projData[i++] = new projRecord("ImagePro 8755D", 1.52, 1.86, 36);
projData[i++] = new projRecord("ImagePro 8758", 1.6, 1.9, 60);
projData[i++] = new projRecord("ImagePro 8759", 1.83, 2.27, 60);
projData[i++] = new projRecord("ImagePro 8761", 1.99, 2.42, 35.7);
projData[i++] = new projRecord("ImagePro 8761A", 1.0, 1.2, 29);
projData[i++] = new projRecord("ImagePro 8767A", 1.5, 1.8, 29);
projData[i++] = new projRecord("ImagePro 8768", 1.5, 1.8, 28);
projData[i++] = new projRecord("ImagePro 8769", 1.5, 1.8, 29);
projData[i++] = new projRecord("ImagePro 8771", 1.5, 1.8, 29);
projData[i++] = new projRecord("ImagePro 8772", 1.61, 1.91, 60);
projData[i++] = new projRecord("ImagePro 8805", 1.5, 2.1, 29);
projData[i++] = new projRecord("ImagePro 8910", 2.0, 2.6, 62);
projData[i++] = new projRecord("ImagePro 8911", 2.3, 3.0, 46);
projData[i++] = new projRecord("ImagePro 8915", 1.5, 1.8, 46);
projData[i++] = new projRecord("ImagePro 8935", 1.5, 2.2, 46);
projData[i++] = new projRecord("ImagePro 8940", 1.5, 2.2, 46);
projData[i++] = new projRecord("ImagePro 8946", 1.5, 2.1, 29);
projData[i++] = new projRecord("ImagePro 8942", 1.5, 2.2, 46);
projData[i++] = new projRecord("ImagePro 9060", 0, 0, 0);
projData[i++] = new projRecord("ImagePro 9066", .078, .078, 2.5);
projData[i++] = new projRecord("ImagePro 9135", 1.5, 2.2, 46);
projData[i++] = new projRecord("InFocus LP350", 2.02, 2.5, 60);
projData[i++] = new projRecord("NEC MT-1045", 1.84, 2.2, 50);
projData[i++] = new projRecord("Proxima DP9260 (Wide Angle)", 1.33, 1.85, 48);
projData[i++] = new projRecord("Proxima Pro AV 9310", 1.81, 2.9, 141.6);
projData[i++] = new projRecord("Sanyo PLC-9000NA", 1.76, 2.82, 43.2);
projData[i++] = new projRecord("Sharp Notevision C20", 1.97, 2.35, 73);
projData[i++] = new projRecord("Sony VPL-CS1", 1.9, 2.5, 78);
for (i=0 ; i<projData.length ; i++) {
	document.getElementById("frmProjector").options[i] = new Option(projData[i].projName,projData[i].projName);
	if (projData[i].projName.toUpperCase() == searchArray['proj'].toUpperCase()) document.getElementById("frmProjector").options[i].selected=true;
}
document.getElementById("resultsLeft").innerHTML = resultsSizeHTML;
document.getElementById("resultsRight").innerHTML = diagramHTML;
}

function Round(theNumber, n) {
//utility function to round a number to n places
var places = Math.pow(10,n);
return Math.round(theNumber * places)/places;
}

function calcSize(){
//Calculate Min/Max projector distance based on screen size & projector model
var projModel = document.getElementById("frmProjector").selectedIndex;
var unitsFeet = (document.getElementById("frmFeetInches").value == "Feet") ? true : false;
var theMeasure = document.getElementById("frmMeasure").value;
var theWidth;	//screen width in inches
//Make sure the HTML skeleton is in place
if (! calcBySize){
	document.getElementById("resultsLeft").innerHTML=resultsSizeHTML;
	document.getElementById("resultsRight").innerHTML=diagramHTML;
	calcBySize=true;
}
switch (document.getElementById("frmDimension").value) {
	case "w": {	//Do calculations based on screen width
		theWidth = theMeasure * ((unitsFeet) ? 12 : 1);
		break;
	}
	case "h": {	//Do calculations based on screen  height
		theWidth = theMeasure * (4/3) * ((unitsFeet) ? 12 : 1);
		break;
	}
	case "d": {	//Do calculations based on screen diagonal
		theWidth = Math.sqrt((theMeasure * theMeasure)/ 1.5625) * ((unitsFeet) ? 12 : 1);
		break;
	}
}
document.getElementById("HTf").innerHTML = Round(theWidth / 16, 1);
document.getElementById("HTi").innerHTML = Round(theWidth * .75, 1);
document.getElementById("WDf").innerHTML = Round(theWidth /12, 1);
document.getElementById("WDi").innerHTML = Round(theWidth, 1);
var diagonal = Math.sqrt(theWidth*theWidth*1.5625);
document.getElementById("DIf").innerHTML = Round(diagonal / 12, 1);
document.getElementById("DIi").innerHTML = Round(diagonal, 1);
if (theWidth * projData[projModel].Tmax >= projData[projModel].PDmin) {
	if (theWidth * projData[projModel].Tmin < projData[projModel].PDmin) {
		document.getElementById("MINf").innerHTML = Round(projData[projModel].PDmin / 12, 1);
		document.getElementById("MINi").innerHTML = Round(projData[projModel].PDmin, 1);
	} else {
		document.getElementById("MINf").innerHTML = Round(theWidth * projData[projModel].Tmin / 12, 1);
		document.getElementById("MINi").innerHTML = Round(theWidth * projData[projModel].Tmin, 1);
	}
	document.getElementById("MAXf").innerHTML = Round(theWidth * projData[projModel].Tmax / 12, 1);
	document.getElementById("MAXi").innerHTML = Round(theWidth * projData[projModel].Tmax, 1);
	document.getElementById("Notes").innerHTML = '';
} else {
	document.getElementById("MINf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("Notes").innerHTML = '<span class="formHighlight">N/A:</span></b> This projector cannot be closer to the screen than ';
	document.getElementById("Notes").innerHTML += projData[projModel].PDmin;
	document.getElementById("Notes").innerHTML += ' inches.  The smallest possible image diagonal is ';
	document.getElementById("Notes").innerHTML += Round(Math.sqrt(1.5625*(projData[projModel].PDmin * projData[projModel].PDmin)/(projData[projModel].Tmax * projData[projModel].Tmax)),0);
	document.getElementById("Notes").innerHTML += ' inches.';
	}
return true;
}

function calcDistance() {
//Calculate Min/Max screen size based on projector distance & model
var projModel = document.getElementById("frmProjector").selectedIndex;
var unitsFeet = (document.getElementById("frmFeetInches2").value == "Feet") ? true : false;
var theDistance = document.getElementById("frmDistance").value * ((unitsFeet) ? 12 : 1);	//Distance to screen in inches
var tMin = projData[projModel].Tmin;
var tMax = projData[projModel].Tmax;
var pdMin = projData[projModel].PDmin;
//Make sure the HTML skeleton is in place
if (calcBySize){
	document.getElementById("resultsLeft").innerHTML=diagramHTML;
	document.getElementById("resultsRight").innerHTML=resultsDistanceHTML;
	calcBySize=false;
}
if (theDistance >= pdMin) {
	document.getElementById("DISf").innerHTML = Round(theDistance / 12, 1);
	document.getElementById("DISi").innerHTML = Round(theDistance, 1);
	document.getElementById("MINHf").innerHTML = Round((theDistance/tMax) * .0625, 1);
	document.getElementById("MINHi").innerHTML = Round((theDistance/tMax) * .75, 1);
	document.getElementById("MAXHf").innerHTML = Round((theDistance/tMin) * .0625, 1);
	document.getElementById("MAXHi").innerHTML = Round((theDistance/tMin) * .75, 1);
	document.getElementById("MINWf").innerHTML = Round((theDistance/tMax) / 12, 1);
	document.getElementById("MINWi").innerHTML = Round((theDistance/tMax), 1);
	document.getElementById("MAXWf").innerHTML = Round((theDistance/tMin) / 12, 1);
	document.getElementById("MAXWi").innerHTML = Round((theDistance/tMin), 1);
	document.getElementById("MINDf").innerHTML = Round(Math.sqrt((theDistance/tMax)*(theDistance/tMax)*1.5625) / 12, 1);
	document.getElementById("MINDi").innerHTML = Round(Math.sqrt((theDistance/tMax)*(theDistance/tMax)*1.5625), 1);
	document.getElementById("MAXDf").innerHTML = Round(Math.sqrt((theDistance/tMin)*(theDistance/tMin)*1.5625) / 12, 1);
	document.getElementById("MAXDi").innerHTML = Round(Math.sqrt((theDistance/tMin)*(theDistance/tMin)*1.5625), 1);
	document.getElementById("Notes").innerHTML = '&nbsp;';
} else {
	document.getElementById("DISf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("DISi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINHf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINHi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXHf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXHi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINWf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINWi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXWf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXWi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINDf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MINDi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXDf").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("MAXDi").innerHTML = '<span class="formHighlight">N/A</span></b>';
	document.getElementById("Notes").innerHTML = '<span class="formHighlight">N/A:</span></b> This projector cannot be closer to the screen than ';
	document.getElementById("Notes").innerHTML += pdMin;
	document.getElementById("Notes").innerHTML += ' inches.  The smallest possible image diagonal is ';
	document.getElementById("Notes").innerHTML += Round(Math.sqrt(1.5625*(pdMin * pdMin)/(tMax * tMax)),0);
	document.getElementById("Notes").innerHTML += ' inches.';
}
}

