// LensCalc
var InternetExplorer;

// lens id
var lID = 0;

// sensor id
var sID = 1;

// direction (reading) id
var dID = 0;

var rowWithMouse = null;

function start() {
	rowRollover('l', 0, 1);
	rowRollover('s', 1, 1);
	rowRollover('d', 0, 1);
	update();
}
function changeLens(arg){
	lID = arg;
	update();
}
function changeSensor(arg){
	sID = arg;
	update();
}

function changeDirection(arg){
	dID = arg;
	update();
}

function update() {
	CalcLens();
}

function rowRollover(type, myId, isInRow) {
	var row = document.getElementById(type + '_' + myId);
	rowWithMouse = (isInRow) ? row : null;
	rowUpdateBg(type, row);
	
}

function rowUpdateBg(type, row) {
	// is it the selected row?
	if ((row.id == 'l_' + lID) || (row.id == 's_' + sID) ||(row.id == 'd_' + dID)) {
		row.style.backgroundColor = "#FFF3C4";
		row.style.borderColor = "#FFCC00";
	} else {
		row.style.backgroundColor = (row == rowWithMouse)   ? '#CEE7FF' : '#F2F2F2';
		row.style.borderColor = (row == rowWithMouse) ? "#0066CC" : "#ffffff";
	}	
}
function rowToggle(type, myId) {
	// unselect old row, select new row.
	if(type == "l") {
		var oldrow = document.getElementById('l_' + lID);
		var newrow = document.getElementById('l_' + myId);
		lID = myId;
	} else if(type == "s") {
		var oldrow = document.getElementById('s_' + sID);
		var newrow = document.getElementById('s_' + myId);
		sID = myId;
	} else {
		var oldrow = document.getElementById('d_' + dID);
		var newrow = document.getElementById('d_' + myId);
		dID = myId;
	}
	rowUpdateBg(type, oldrow);
	rowUpdateBg(type, newrow);
	
	// update lens calc
	if(type == 'l') {
		changeLens(myId)
	} else if (type =='s') {
		changeSensor(myId)
	} else {
		changeDirection(myId)
	}
	
}

function DrawFOV(x1,x2,x3,y1,y2,y3,sColor,bFill)
{
	var FovXpts = new Array(x1,x2,x3,x1);
	var FovYpts = new Array(y1,y2,y3,y1);
	
	jgFOV.setStroke(1); 
	jgFOV.setColor("#" + sColor);
	if(bFill)
		jgFOV.fillPolygon(FovXpts, FovYpts); 
	else 
		jgFOV.drawPolygon(FovXpts, FovYpts);
}

function CalcLens()
{
	var Lh,Lv,V,H,D,U,Focal,FocalZm,Vss;
	var x1,x2,x3,y1,y2,y3,cvH,cvW,FovMinH,FovMaxH;
	var theta1,theta2,tn,adj;
	var lblAngle,lblHeight,lblWidth,lblDiag,lblObject;
	switch (sID)
	{
		case 0:
			Lv=2.4;
			Lh=3.2;
			Ld=Math.sqrt(Math.pow(Lv,2)+Math.pow(Lh,2));
			break;
		case 1:
			Lv=3.6;
			Lh=4.8;
			Ld=Math.sqrt(Math.pow(Lv,2)+Math.pow(Lh,2));
			break;
		case 2:
			Lv=4.8;
			Lh=6.4;
			Ld=Math.sqrt(Math.pow(Lv,2)+Math.pow(Lh,2));
			break;
		case 3:
			Lv=6.6;
			Lh=8.8;
			Ld=Math.sqrt(Math.pow(Lv,2)+Math.pow(Lh,2));
			break;
		case 4:
			Lv=9.6;
			Lh=12.8;
			Ld=Math.sqrt(Math.pow(Lv,2)+Math.pow(Lh,2));
	} //end switch
	switch (lID)
	{
		case 0:
			Focal=2.8;
			break;
		case 1:
			Focal=3.2;
			break;
		case 2:
			Focal=4.2;
			break;
		case 3:
			Focal=6;
			break;
		case 4:
			Focal=8;
			break;
		case 5:
			Focal=12;
			break;
		case 6:
			Focal=16;
			break;
		case 7:
			Focal=20;
			break;
		case 8:
			Focal=33;
			break;
		case 9:
			Focal=50;
			break;
		case 10:
			Focal=2.9;
			FocalZm=8;
			break;
		case 11:
			Focal=3.5;
			FocalZm=8;
			break;
		case 12:
			Focal=5;
			FocalZm=50;
	} //end switch
	lblObject = document.getElementById("Distance");
	D=lblObject.value;
	lblObject = document.getElementById("Units");
	U=lblObject.value;
	switch (dID)
	{
		case 0:
			Vss = Lh;
			break;
		case 1:
			Vss = Lv;
			break;
		case 2:
			Vss = Ld;
	} //end switch
	
	lblWidth=(Math.round(((Lh*D)/Focal)*10)/10)+U;
	lblHeight=(Math.round(((Lv*D)/Focal)*10)/10)+U;
	lblDiag=(Math.round(((Ld*D)/Focal)*10)/10)+U;
	 
	
	//clear the canvas
	jgFOV.clear();
	//set the canvas height and width
	cvW=400;
	cvH=150;
	FovMinH=100;
	FovMaxH=140;
	//calculate Max FOV
	theta1=Math.atan(Vss/(2*Focal));
	tn=Math.tan(theta1);
	//give it a length
	adj=FovMinH;
	
	x1=(cvW/2)-Math.round(adj*tn);
	y1=cvH-adj;
	
	x2=(cvW/2)+Math.round(adj*tn);
	y2=cvH-adj;
	
	x3=(cvW/2);
	y3=cvH;
	//draw it
	DrawFOV(x1,x2,x3,y1,y2,y3,'809cff',true);
	//draw a border
	DrawFOV(x1,x2,x3,y1,y2,y3,'010167',false);
	
	//calculate Min FOV
	if (lID > 9) 
	{
		theta2=Math.atan(Vss/(2*FocalZm));
		tn=Math.tan(theta2);
		//give it a length
		adj=FovMaxH;
		
		x1=(cvW/2)-Math.round(adj*tn);
		y1=cvH-adj;
		//alert(adj*tn);
		x2=(cvW/2)+Math.round(adj*tn);
		y2=cvH-adj;
	
		x3=(cvW/2);
		y3=cvH;
		//draw it
		DrawFOV(x1,x2,x3,y1,y2,y3,'fff6d2',true);
		DrawFOV(x1,x2,x3,y1,y2,y3,'ffde5d',false);
		
		//draw the overlap 
		//theta=Math.atan(Lh/(2*Focal+20));
		tn=Math.tan(theta2);
		//give it a length
		adj=FovMinH;
	
		x1=(cvW/2)-Math.round(adj*tn);
		y1=cvH-adj;
		//alert(adj*tn);
		x2=(cvW/2)+Math.round(adj*tn);
		y2=cvH-adj;
	
		x3=(cvW/2);
		y3=cvH;
		//draw it
		DrawFOV(x1,x2,x3,y1,y2,y3,'d1d2d2',true);
		DrawFOV(x1,x2,x3,y1,y2,y3,'d1bb5d',false);
		
		
	}
	
	jgFOV.paint();
	//document.frmCalc.FovAngle.value = Math.round((2*theta1*(180/Math.PI))*100)/100;
	lblObject = document.getElementById("Angle1");
	//lblObject.innerText= (Math.round((2*theta1*(180/Math.PI))*100)/100) + String.fromCharCode(176);
	lblObject.value = (Math.round((2*theta1*(180/Math.PI))*100)/100) + String.fromCharCode(176);
	lblObject = document.getElementById("Height");
	lblObject.value = lblHeight;
	
	lblObject = document.getElementById("Width");
	lblObject.value = lblWidth;
	
	lblObject = document.getElementById("Diagonal");
	lblObject.value = lblDiag;
	
	
	if(theta2>0){
		lblObject = document.getElementById("Angle2");
		lblObject.innerText= (Math.round((2*theta2*(180/Math.PI))*100)/100) + String.fromCharCode(176);
		lblObject = document.getElementById("Angle2Title");
		lblObject.innerText='Angle Min:';
		lblObject = document.getElementById("Angle1Title");
		lblObject.innerText='Angle Max:';
	}
	else {
		lblObject = document.getElementById("Angle2");
		lblObject.innerText='';
		lblObject = document.getElementById("Angle2Title");
		lblObject.innerText='';
		lblObject = document.getElementById("Angle1Title");
		lblObject.innerText='Angle:';
	}
	
}							
