function calcFramerateCCD_old(formname)
{
	var integration = document.getElementById(formname).integrationtime.value;
	var lines = document.getElementById(formname).numberlines.value;
  var cam_mode = document.getElementById(formname).elements["camera_mode"];
	var cam_mode_length = cam_mode.length;

	for(i = 0; i < cam_mode_length; i++)
	{
		if(cam_mode[i].checked)
		{
			var mode = cam_mode[i].value;
		}
	}

	if(mode == "high")
	{
		var trig = document.getElementById(formname).trigger_high.value;
		var readline = document.getElementById(formname).readline_high.value;
		var vshift = document.getElementById(formname).vshift_high.value;
		var trans = document.getElementById(formname).trans_high.value;
		var wait = document.getElementById(formname).wait_high.value;
		var max_h_lines = document.getElementById(formname).maxhlines_high.value;
		var max_w_lines = document.getElementById(formname).maxwlines_high.value;
		var max_integration = document.getElementById(formname).maxintegration_high.value;
	}
	else
	{
		var trig = document.getElementById(formname).trigger_standard.value;
		var readline = document.getElementById(formname).readline_standard.value;
		var vshift = document.getElementById(formname).vshift_standard.value;
		var trans = document.getElementById(formname).trans_standard.value;
		var wait = document.getElementById(formname).wait_standard.value;
		var max_h_lines = document.getElementById(formname).maxhlines_standard.value;
		var max_w_lines = document.getElementById(formname).maxwlines_standard.value;
		var max_integration = document.getElementById(formname).maxintegration_standard.value;
	}

	if(parseInt(lines) > parseInt(max_h_lines))
	{
		lines = max_h_lines;
		document.getElementById(formname).numberlines.value = max_h_lines;
	}
	if(parseInt(integration) > parseInt(max_integration))
	{
		integration = max_integration;
		document.getElementById(formname).integrationtime.value = max_integration;
	}

	if((integration != "") && (lines != ""))
	{
		readout = (lines * parseFloat(readline)) + ((max_w_lines - lines) * parseFloat(vshift));
		frame = 1/(parseFloat(trig)+parseFloat(readout)+parseFloat(integration)+parseFloat(trans)+parseFloat(wait));
		frame_rate = (Math.round(frame * 10000000) / 10);
		document.getElementById(formname).framerate.value = frame_rate;
	}
	else
	{
		alert("Please insert two values.");
	}
}

function calcFramerateCCD(formname)
{
	var integration = document.getElementById(formname).integrationtime.value;
	var lines = document.getElementById(formname).numberlines.value;
  var cam_mode = document.getElementById(formname).elements["camera_mode"];
	var cam_mode_length = cam_mode.length;
	var expose_mode = document.getElementById(formname).elements["expose_mode"];
	var expose_mode_length = expose_mode.length;

	for(i = 0; i < cam_mode_length; i++)
	{
		if(cam_mode[i].checked)
		{
			var mode = cam_mode[i].value;
		}
	}

	if(mode == "high")
	{
		var trig = document.getElementById(formname).trigger_high.value;
		var readline = document.getElementById(formname).readline_high.value;
		var vshift = document.getElementById(formname).vshift_high.value;
		var trans = document.getElementById(formname).trans_high.value;
		var wait = document.getElementById(formname).wait_high.value;
		var max_h_lines = document.getElementById(formname).maxhlines_high.value;
		var max_w_lines = document.getElementById(formname).maxwlines_high.value;
		var max_integration = document.getElementById(formname).maxintegration_high.value;
	}
	else
	{
		var trig = document.getElementById(formname).trigger_standard.value;
		var readline = document.getElementById(formname).readline_standard.value;
		var vshift = document.getElementById(formname).vshift_standard.value;
		var trans = document.getElementById(formname).trans_standard.value;
		var wait = document.getElementById(formname).wait_standard.value;
		var max_h_lines = document.getElementById(formname).maxhlines_standard.value;
		var max_w_lines = document.getElementById(formname).maxwlines_standard.value;
		var max_integration = document.getElementById(formname).maxintegration_standard.value;
	}

	for(i = 0; i < expose_mode_length; i++)
	{
		if(expose_mode[i].checked)
		{
			var e_mode = expose_mode[i].value;
		}
	}


	if(parseInt(lines) > parseInt(max_h_lines))
	{
		lines = max_h_lines;
		document.getElementById(formname).numberlines.value = max_h_lines;
	}
	if(parseInt(integration) > parseInt(max_integration))
	{
		integration = max_integration;
		document.getElementById(formname).integrationtime.value = max_integration;
	}

	if((integration != "") && (lines != ""))
	{
		readout = (lines * parseFloat(readline)) + ((max_w_lines - lines) * parseFloat(vshift)) + parseFloat(readline);

		if(e_mode == "standard")
		{
			frame = 1/(parseFloat(trig)+parseFloat(readout)+parseFloat(integration)+parseFloat(trans)+parseFloat(wait));
		}
		else
		{
			if((parseFloat(trig)+parseFloat(readout)+parseFloat(trans)+parseFloat(wait)) < parseFloat(integration))
			{
				frame = 1/(parseFloat(integration));
			}
			else
			{
				frame = 1/(parseFloat(trig)+parseFloat(readout)+parseFloat(trans)+parseFloat(wait));
			}
		}

		frame_rate = (Math.round(frame * 10000000) / 10);
		document.getElementById(formname).framerate.value = frame_rate;
	}
	else
	{
		alert("Please insert two values.");
	}
}

function calcFramerateCMOS_Aptina_old(formname)
{
	var ImageWidth = document.getElementById(formname).imagewidth.value;
	var ImageHeight = document.getElementById(formname).imageheight.value;
	var ExposureTime = document.getElementById(formname).exposuretime.value;
	var cam_mode = document.getElementById(formname).elements["camera_mode"];
	var cam_mode_length = cam_mode.length;
	var PixelClock = document.getElementById(formname).pixelclock.value;
	var max_h_lines = document.getElementById(formname).maxhlines.value;
	var max_w_lines = document.getElementById(formname).maxwlines.value;

	for(i = 0; i < cam_mode_length; i++)
	{
		if(cam_mode[i].checked)
		{
			var mode = cam_mode[i].value;
		}
	}

	if(parseInt(ImageWidth) > parseInt(max_w_lines))
	{
		ImageWidth = max_w_lines;
		document.getElementById(formname).imagewidth.value = max_w_lines;
	}
	if(parseInt(ImageHeight) > parseInt(max_h_lines))
	{
		ImageHeight = max_h_lines;
		document.getElementById(formname).imageheight.value = max_h_lines;
	}

	if((ImageWidth != "") && (ImageHeight != "") && (ExposureTime != ""))
	{
		ActivePixelReadOut = (((parseInt(ImageWidth) * parseInt(ImageHeight)) / parseInt(PixelClock)) * 1000000);

		if(mode == "snap")
		{
			AdditionalTransferTimes = (Math.round(((5.01 * parseInt(ImageHeight)) + 300) * 10) / 10);
			readout = (Math.round((ActivePixelReadOut + AdditionalTransferTimes + parseInt(ExposureTime)) * 10) / 10);
			frame = 1/(readout / 1000000);
			frame_rate = (Math.round(frame * 10) / 10);
			document.getElementById(formname).framerate.value = frame_rate;
		}
		else
		{
			AdditionalTransferTimes = (Math.round(((5.01 * parseInt(ImageHeight)) + 480) * 10) / 10);
			readout = (Math.round((ActivePixelReadOut + AdditionalTransferTimes) * 10) / 10);
			if(ExposureTime < readout)
			{
				frame = 1/(readout / 1000000);
				frame_rate = (Math.round(frame * 10) / 10);
				document.getElementById(formname).framerate.value = frame_rate;
			}
			else
			{
				frame = 1/(parseFloat(ExposureTime) / 1000000);
				frame_rate = (Math.round(frame * 10) / 10);
				document.getElementById(formname).framerate.value = frame_rate;
			}
		}
	}
	else
	{
		alert("Please insert three values.");
	}
}

function calcFramerateCMOS_Aptina(formname)
{
	var ImageWidth = document.getElementById(formname).imagewidth.value;
	var ImageHeight = document.getElementById(formname).imageheight.value;
	var ExposureTime = document.getElementById(formname).exposuretime.value;
	var max_h_lines = document.getElementById(formname).maxhlines.value;
	var max_w_lines = document.getElementById(formname).maxwlines.value;
	var cam_mode = document.getElementById(formname).elements["camera_mode"];
	var cam_mode_length = cam_mode.length;
	var pixel_clock = document.getElementById(formname).elements["pixelclock"];
	var pixel_clock_length = pixel_clock.length;
	var HorizontalBlank = document.getElementById(formname).horizontalblank.value;
	var VerticalBlank = document.getElementById(formname).verticalblank.value;
	var FrameTime = 0;

	for(i = 0; i < cam_mode_length; i++)
	{
		if(cam_mode[i].checked)
		{
			var mode = cam_mode[i].value;
		}
	}

	for(i = 0; i < pixel_clock_length; i++)
	{
		if(pixel_clock[i].checked)
		{
			var PixelClock = pixel_clock[i].value;
		}
	}

	if(parseInt(ImageWidth) > parseInt(max_w_lines))
	{
		ImageWidth = max_w_lines;
		document.getElementById(formname).imagewidth.value = max_w_lines;
	}
	if(parseInt(ImageHeight) > parseInt(max_h_lines))
	{
		ImageHeight = max_h_lines;
		document.getElementById(formname).imageheight.value = max_h_lines;
	}

	if((ImageWidth != "") && (ImageHeight != "") && (ExposureTime != ""))
	{
		switch(ImageWidth)
		{
			case 752:
				FrameTime = ((parseInt(ImageWidth) + parseInt(HorizontalBlank)) * ((parseInt(ImageHeight) + parseInt(VerticalBlank)) / parseInt(PixelClock)));
				break;
			case 1280:
				FrameTime = (parseInt(ImageHeight) * ((1650/parseInt(PixelClock))) + (parseInt(VerticalBlank)) * parseInt(PixelClock));
				break;
			default:
				FrameTime = (parseInt(ImageHeight) * (((2*450+parseInt(ImageHeight))/parseInt(PixelClock))) + (parseInt(VerticalBlank)) * parseInt(PixelClock));
				break;
		}
		
		
		if(mode == "snap")
		{
			FrameTime = FrameTime + parseInt(ExposureTime);
		}
		readout = (Math.round(FrameTime * 10) / 10);
		if(ExposureTime < readout)
		{
			frame = 1/(readout / 1000000);
			frame_rate = (Math.round(frame * 10) / 10);
			document.getElementById(formname).framerate.value = frame_rate;
		}
		else
		{
			frame = 1/(parseFloat(ExposureTime) / 1000000);
			frame_rate = (Math.round(frame * 10) / 10);
			document.getElementById(formname).framerate.value = frame_rate;
		}
	}
	else
	{
		alert("Please insert three values.");
	}
}

function calcFramerateCMOS_E2V(formname)
{
	var ImageWidth = document.getElementById(formname).imagewidth.value;
	var ImageHeight = document.getElementById(formname).imageheight.value;
	var ExposureTime = document.getElementById(formname).exposuretime.value;
	var max_h_lines = document.getElementById(formname).maxhlines.value;
	var max_w_lines = document.getElementById(formname).maxwlines.value;
	var cam_mode = document.getElementById(formname).elements["camera_mode"];
	var cam_mode_length = cam_mode.length;
	var InternalLineLength = document.getElementById(formname).internallinelength.value;
	var InternalADCClock = document.getElementById(formname).internaladcclock.value;
	var FrameTime = 0;

	for(i = 0; i < cam_mode_length; i++)
	{
		if(cam_mode[i].checked)
		{
			var mode = cam_mode[i].value;
		}
	}

	if(parseInt(ImageWidth) > parseInt(max_w_lines))
	{
		ImageWidth = max_w_lines;
		document.getElementById(formname).imagewidth.value = max_w_lines;
	}
	if(parseInt(ImageHeight) > parseInt(max_h_lines))
	{
		ImageHeight = max_h_lines;
		document.getElementById(formname).imageheight.value = max_h_lines;
	}

	if((ImageWidth != "") && (ImageHeight != "") && (ExposureTime != ""))
	{
		switch(ImageWidth)
		{
			default:
				FrameTime = ((parseInt(InternalLineLength)/(parseFloat(InternalADCClock)/2)) * (10+parseInt(ImageHeight)))/ 1000;
				break;
		}
		
		
		if(mode == "snap")
		{
			FrameTime = FrameTime + parseInt(ExposureTime);
		}
		readout = FrameTime;
		if(ExposureTime < readout)
		{
			frame = 1/(readout / 1000000);
			frame_rate = (Math.round(frame * 10) / 10);
			document.getElementById(formname).framerate.value = frame_rate;
		}
		else
		{
			frame = 1/(parseFloat(ExposureTime) / 1000000);
			frame_rate = (Math.round(frame * 10) / 10);
			document.getElementById(formname).framerate.value = frame_rate;
		}
	}
	else
	{
		alert("Please insert three values.");
	}
}


function calcFramerateCMOS_Aptina_ExposureStepSize(formname)
{
	var ImageWidth = document.getElementById(formname).imagewidth.value;
	var PixelClock = document.getElementById(formname).pixelclock.value;
	var max_w_lines = document.getElementById(formname).maxwlines.value;
	var LineDelay = document.getElementById(formname).linedelay.value;

	if(parseInt(ImageWidth) > parseInt(max_w_lines))
	{
		ImageWidth = max_w_lines;
		document.getElementById(formname).imagewidth.value = max_w_lines;
	}

	if((ImageWidth != ""))
	{
		PixelClkPeriod = (Math.round((1 / parseInt(PixelClock)) * 10000000000) / 10000000000);
		RowTime = Math.round(((parseInt(ImageWidth) + 244 + parseInt(LineDelay)) * parseFloat(PixelClkPeriod)) * 10) / 10;
		document.getElementById(formname).exposurestepsize.value = RowTime;
	}
	else
	{
		alert("Please insert the value.");
	}
}

function calcFramerateCMOS_Cypress(formname)
{
	var ImageWidth = document.getElementById(formname).imagewidth.value;
	var ImageHeight = document.getElementById(formname).imageheight.value;
	var RbT = document.getElementById(formname).rbt.value;
	var PixelClock = document.getElementById(formname).pixelclock.value;
	var max_h_lines = document.getElementById(formname).maxhlines.value;
	var max_w_lines = document.getElementById(formname).maxwlines.value;

	if(parseInt(ImageWidth) > parseInt(max_w_lines))
	{
		ImageWidth = max_w_lines;
		document.getElementById(formname).imagewidth.value = max_w_lines;
	}
	if(parseInt(ImageHeight) > parseInt(max_h_lines))
	{
		ImageHeight = max_h_lines;
		document.getElementById(formname).imageheight.value = max_h_lines;
	}

	if((ImageWidth != "") && (ImageHeight != ""))
	{
		FrameRate = parseInt(ImageHeight) * (parseFloat(RbT) + (parseFloat(PixelClock) * parseInt(ImageWidth)));
		frame = 1/(parseFloat(FrameRate)) * 1000000;
		frame_rate = (Math.round(frame * 10) / 10);
		document.getElementById(formname).framerate.value = frame_rate;
	}
	else
	{
		alert("Please insert two values.");
	}
}

function calcFramerateCMOS_Cypress_Snapshot(formname)
{
	var ImageWidth = document.getElementById(formname).imagewidth.value;
	var ImageHeight = document.getElementById(formname).imageheight.value;
	var ExposureTime = document.getElementById(formname).exposuretime.value;
	var RbT = document.getElementById(formname).rbt.value;
	var PixelClock = document.getElementById(formname).pixelclock.value;
	var max_h_lines = document.getElementById(formname).maxhlines.value;
	var max_w_lines = document.getElementById(formname).maxwlines.value;

	if(parseInt(ImageWidth) > parseInt(max_w_lines))
	{
		ImageWidth = max_w_lines;
		document.getElementById(formname).imagewidth.value = max_w_lines;
	}
	if(parseInt(ImageHeight) > parseInt(max_h_lines))
	{
		ImageHeight = max_h_lines;
		document.getElementById(formname).imageheight.value = max_h_lines;
	}

	if((ImageWidth != "") && (ImageHeight != "") && (ExposureTime != ""))
	{
		FrameRate = (parseInt(ExposureTime)*1000) + (parseInt(ImageHeight) * (parseFloat(RbT) + (parseFloat(PixelClock) * parseInt(ImageWidth))));
		frame = 1/(parseFloat(FrameRate)) * 1000000;
		frame_rate = (Math.round(frame * 10) / 10);
		document.getElementById(formname).framerate.value = frame_rate;
	}
	else
	{
		alert("Please insert two values.");
	}
}

function calcTraffic(formname)
{
	var image_header = 82;
	var image_trailer = 72;
	// var header_size = 36 IP Header + UDP Header + GVPC Header
	var image_width = document.getElementById(formname).image_width.value;
	var image_height = document.getElementById(formname).image_height.value;
	var bytes_per_pixel = document.getElementById(formname).bytes_per_pixel.value;
	var packet_size = document.getElementById(formname).packet_size.value;

	if((image_width != "") && (image_height != "") && (bytes_per_pixel != "") && (packet_size != ""))
	{
		var image_size = parseFloat(bytes_per_pixel.replace(",",".")) * parseInt(image_width) * parseInt(image_height);
		var payload_packets = Math.ceil(image_size / (packet_size - 50));
		traffic = image_header + (payload_packets * 72) + image_size + image_header;
		document.getElementById(formname).traffic.value = traffic;
		var framerate_1000 = Math.round(125000000 / traffic);
		document.getElementById(formname).framerate_1000.value = framerate_1000;
		var framerate_100 = Math.round(12500000 / traffic);
		document.getElementById(formname).framerate_100.value = framerate_100;
	}
	else
	{
		alert("Please insert all values.");
	}
}

function calcDelay(formname)
{
	var overhead_per_packet = 50; // 14 (Ethernet Header) + 20 (IP Header) + 8 (UDP Header) + 8 (GVPS Header)
	var additional_overhead_per_image = 44; // 36 (Image Header) + 8 (Image Trailer)

	var gevscps = document.getElementById(formname).gevscps.value;
	var payloadsize = document.getElementById(formname).payloadsize.value;
	var bandwidth_desired = document.getElementById(formname).bandwidth_desired.value;
	var bandwidth_overall = document.getElementById(formname).bandwidth_overall.value;
	var gevtimestamptickfrequency = document.getElementById(formname).gevtimestamptickfrequency.value;

	if((gevscps != "") && (payloadsize != "") && (bandwidth_desired != "") && (bandwidth_overall != "") && (gevtimestamptickfrequency != ""))
	{
		var payload_packets_per_image = Math.round((parseInt(payloadsize) + parseInt(gevscps) - parseInt(1)) / parseInt(gevscps));
		var last_payload_packet_size = (parseInt(payloadsize) % parseInt(gevscps)) == 0 ? parseInt(gevscps) : (parseInt(payloadsize) % parseInt(gevscps))
		var imm_av_one = (((((parseInt(payload_packets_per_image) - 1) * parseInt(gevscps)) + parseInt(last_payload_packet_size)) + parseInt(additional_overhead_per_image)) + (2 + parseInt(payload_packets_per_image))) * overhead_per_packet;
		var imm_av_two = 2 + payload_packets_per_image;
		var average_packet_size = imm_av_one / imm_av_two;
		var packets_per_second = parseFloat(bandwidth_desired) / average_packet_size;
		var bandwidth_ratio = bandwidth_desired / bandwidth_overall;
		var gevscpd_us = ((parseFloat(1) - parseFloat(bandwidth_ratio)) * parseFloat(1000000)) / parseFloat(packets_per_second);
		var gevscpd_ticks = Math.round((1000000 / parseFloat(gevtimestamptickfrequency)) * parseFloat(gevscpd_us));

		document.getElementById(formname).gevscpd_us.value = Math.round(gevscpd_us * 100) / 100;
		document.getElementById(formname).gevscpd_ticks.value = gevscpd_ticks;
	}
	else
	{
		alert("Please insert all values.");
	}
}

function calcFramerateCCD_BCX(formname)
{
	var integration = document.getElementById(formname).integrationtime.value;
	var lines = document.getElementById(formname).numberlines.value;
  var cam_mode = document.getElementById(formname).elements["camera_mode"];
	var cam_mode_length = cam_mode.length;
	var expose_mode = document.getElementById(formname).elements["expose_mode"];
	var expose_mode_length = expose_mode.length;

	for(i = 0; i < cam_mode_length; i++)
	{
		if(cam_mode[i].checked)
		{
			var mode = cam_mode[i].value;
		}
	}

	if(mode == "high")
	{
		var readline = document.getElementById(formname).readline_high.value;
		var vshift = document.getElementById(formname).vshift_high.value;
		var trans = document.getElementById(formname).trans_high.value;
		var max_h_lines = document.getElementById(formname).maxhlines_high.value;
		var max_w_lines = document.getElementById(formname).maxwlines_high.value;
		var max_integration = document.getElementById(formname).maxintegration_high.value;
	}
	else if(mode == "low")
	{
		var readline = document.getElementById(formname).readline_low.value;
		var vshift = document.getElementById(formname).vshift_low.value;
		var trans = document.getElementById(formname).trans_low.value;
		var max_h_lines = document.getElementById(formname).maxhlines_low.value;
		var max_w_lines = document.getElementById(formname).maxwlines_low.value;
		var max_integration = document.getElementById(formname).maxintegration_low.value;
	}
	else
	{
		var readline = document.getElementById(formname).readline_standard.value;
		var vshift = document.getElementById(formname).vshift_standard.value;
		var trans = document.getElementById(formname).trans_standard.value;
		var max_h_lines = document.getElementById(formname).maxhlines_standard.value;
		var max_w_lines = document.getElementById(formname).maxwlines_standard.value;
		var max_integration = document.getElementById(formname).maxintegration_standard.value;
	}

	for(i = 0; i < expose_mode_length; i++)
	{
		if(expose_mode[i].checked)
		{
			var e_mode = expose_mode[i].value;
		}
	}

	if(parseInt(lines) > parseInt(max_h_lines))
	{
		lines = max_h_lines;
		document.getElementById(formname).numberlines.value = max_h_lines;
	}
	if(parseInt(integration) > parseInt(max_integration))
	{
		integration = max_integration;
		document.getElementById(formname).integrationtime.value = max_integration;
	}

	if((integration != "") && (lines != ""))
	{
		readout = ((parseInt(lines)+1) * parseFloat(readline)) + ((max_w_lines - parseInt(lines)) * parseFloat(vshift)) + parseFloat(trans);

		if(e_mode == "standard")
		{
			frame = 1/(parseFloat(readout)+parseFloat(integration));
		}
		else
		{
			if(parseFloat(readout) < parseFloat(integration))
			{
				frame = 1/(parseFloat(integration));
			}
			else
			{
				frame = 1/(parseFloat(readout));
			}
		}

		frame_rate = (Math.round(frame * 10000000) / 10);
		document.getElementById(formname).framerate.value = frame_rate;
	}
	else
	{
		alert("Please insert two values.");
	}
}
