// JavaScript Document

function nozzleDischarge( form )
	{
		pressureUnits 	= parseFloat(form.pressureUnits.value);
		diameterUnits 	= parseFloat(form.diameterUnits.value);
		flowRateUnits 	= parseFloat(form.flowRateUnits.value);

		pressure	= parseFloat(form.pressure.value) * pressureUnits;
		diameter 	= parseFloat(form.diameter.value) / diameterUnits;

		flowRate = Math.pow( diameter, 2 );
		flowRate = Math.sqrt( pressure ) * flowRate;
		flowRate = ( 28.925 *  flowRate ) / flowRateUnits;
		flowRate = Math.round( flowRate *10000 );
		flowRate = flowRate / 10000;

		form.flowRate.value = flowRate;	
	}
	
function nozzleDiameter( form )
	{
		pressureUnits 	= parseFloat(form.pressureUnits.value);
		diameterUnits 	= parseFloat(form.diameterUnits.value);
		flowUnits 		= parseFloat(form.flowUnits.value);

		pressure	= parseFloat(form.pressure.value) / pressureUnits;
		flow 		= parseFloat(form.flow.value) / flowUnits;

		diameter = Math.sqrt( pressure );
		diameter = 28.925 * diameter;
		diameter = Math.sqrt( flow / diameter );
		diameter = diameter * diameterUnits;
		diameter = Math.round( diameter * 10000 );
		diameter = diameter / 10000;

		form.diameter.value = diameter;
	
	}
	

function calc_precipitation( form )
	{
		diameterUnits 		= parseFloat( form.diameterUnits.value );
		pressureUnits 		= parseFloat( form.pressureUnits.value );
		headSpacingUnits 	= parseFloat( form.headSpacingUnits.value );
		lineSpacingUnits 	= parseFloat( form.lineSpacingUnits.value );
		nozzleFlowRateUnits = parseFloat( form.nozzleFlowRateUnits.value );
		nozzleAppRateUnits 	= parseFloat( form.nozzleAppRateUnits.value );
		
		diameter 	= parseFloat( form.diameter.value ) * diameterUnits;
		pressure 	= parseFloat( form.pressure.value ) / pressureUnits;
		headSpacing = parseFloat( form.headSpacing.value ) / headSpacingUnits;
		lineSpacing = parseFloat( form.lineSpacing.value ) / lineSpacingUnits;
		efficiency 	= parseFloat( form.efficiency.value );

		nozzleFlowRate = diameter / 2.54;
		nozzleFlowRate = 28.925 * Math.sqrt( pressure ) * Math.pow( nozzleFlowRate, 2 );
		nozzleFlowRate = nozzleFlowRate / nozzleFlowRateUnits;
		nozzleFlowRate =  parseFloat( nozzleFlowRate );
		nozzleFlowRate = Math.round( nozzleFlowRate * 10000 );
		nozzleFlowRate = nozzleFlowRate / 10000;
		
		 form.nozzleFlowRate.value = nozzleFlowRate
	
		nozzleAppRate = diameter / 2.54;
		nozzleAppRate = Math.pow( nozzleAppRate, 2 );
		nozzleAppRate = 28.925 * Math.sqrt( pressure ) * nozzleAppRate;
		nozzleAppRate = nozzleAppRate / ( ( lineSpacing * headSpacing ) / efficiency * 100 );
		nozzleAppRate = parseFloat( 96.25025 * nozzleAppRate * nozzleAppRateUnits );
		nozzleAppRate = Math.round( nozzleAppRate * 10000 );
		nozzleAppRate = nozzleAppRate / 10000;
		
		 form.nozzleAppRate.value = nozzleAppRate;

	}
	
function calc_nozzleDiameter( form )
	{
		applicationRateUnits	= parseFloat( form.applicationRateUnits.value );
		pressureUnits 			= parseFloat( form.pressureUnits.value );
		headSpaceUnits 			= parseFloat( form.headSpaceUnits.value );
		lineSpaceUnits 			= parseFloat( form.lineSpaceUnits.value );
		nozzleFlowUnits 		= parseFloat( form.nozzleFlowUnits.value );
		nozzleDiameterUnits 	= parseFloat( form.nozzleDiameterUnits.value );

		applicationRate	= parseFloat( form.applicationRate.value ) / applicationRateUnits;
		efficiency 		= parseFloat( form.efficiency.value ) / 100;
		lineSpace 		= parseFloat( form.lineSpace.value ) / lineSpaceUnits;
		headSpace 		= parseFloat( form.headSpace.value ) / headSpaceUnits;
		pressure 		= parseFloat( form.pressure.value ) / pressureUnits;
		
		nozzleFlow = applicationRate / 96.25025;
		nozzleFlow = nozzleFlow * lineSpace * headSpace;
		nozzleFlow = nozzleFlow / efficiency;
		nozzleFlow = nozzleFlow / nozzleFlowUnits;
		
		 form.nozzleFlow.value = nozzleFlow;
	
		nozzleDiameter = applicationRate / 96.25025;
		nozzleDiameter = nozzleDiameter * lineSpace * headSpace / efficiency;
		nozzleDiameter = nozzleDiameter / ( Math.sqrt( pressure ) * 28.925 );
		nozzleDiameter = Math.sqrt( nozzleDiameter );
		nozzleDiameter = nozzleDiameter * 2.54;
		nozzleDiameter = nozzleDiameter / nozzleDiameterUnits;
		nozzleDiameter = Math.round( nozzleDiameter * 10000 );
		nozzleDiameter = nozzleDiameter / 10000;
		
		 form.nozzleDiameter.value = nozzleDiameter;

	}
	

function calc_nozzleDiameterSize( diameter )
{
	var returnVal = 0;
	if( isNaN( diameter ) || (diameter == 0 )  || !isFinite( diameter ) )
	{
		returnVal = "";
		return returnVal;	
	}

	if( (diameter % 2 ) > 0 )
	{	
		returnVal = diameter + "/128";
	}
	else
	{
		if( ( diameter % 4 ) > 0 )
		{
			diameter = diameter / 2;
			returnVal = diameter + "/64";
		}
		else
		{
			if( ( diameter % 8 ) > 0 )
			{
				diameter = diameter / 4;
				returnVal = diameter + "/32";
			}
			else
			{
				if( ( diameter % 16 ) > 0 ) 
				{
					diameter = diameter / 8 ;
					returnVal = diameter + "/16";
				}
				else
				{
					if( (diameter % 32 ) > 0 )	
					{
						diameter = diameter / 16;
						returnVal = diameter + "/8";
					}
					else
					{
						diameter = diameter / 32;
						returnVal = diameter + "/4";
					}
				}
			}
		}
		
	}
	
	return returnVal;
}

function calc_handMoveValues( form )
{
	// calculate Max net depth of water per irrigation
	holdingCapacity 	= parseFloat( form.holdingCapacity.value );	
	rootingDepthUnits	= parseFloat( form.rootingDepthUnits.value );
	rootingDepth		= parseFloat( form.rootingDepth.value ) / rootingDepthUnits;
	allowableDeficit	= parseFloat( form.allowableDeficit.value ) / 100;
	maxNetDepthUnits	= parseFloat( form.maxNetDepthUnits.value );
	

	maxNetDepth = holdingCapacity * rootingDepth * allowableDeficit;
	form.maxNetDepth.value  = maxNetDepth / maxNetDepthUnits;
	
	

	// calculate the maximum ET
	maxETUnits			= parseFloat( form.maxETUnits.value );
	maxET				= parseFloat( form.maxET.value ) * maxETUnits;
	
	//form.maxET.value = maxET;
	
	// calculate maximum move interval and suggested move interval

	timeUnits		= parseFloat( form.timeUnits.value );
	lineSpacingUnits	= parseFloat( form.lineSpacingUnits.value );
	sprinklerSpacingUnits	= parseFloat( form.sprinklerSpacingUnits.value );
	pressureUnits		= parseFloat( form.pressureUnits.value );
	
	setsPerLine 	= parseFloat( form.setsPerLine.value );	
	nextSetMoveTime	= parseFloat( form.nextSetMoveTime.value ) / timeUnits;
	lineSpacing			= parseFloat( form.lineSpacing.value ) * lineSpacingUnits;
	sprinklerSpacing 		= parseFloat( form.sprinklerSpacing.value ) * sprinklerSpacingUnits;
	efficiency		= parseFloat( form.efficiency.value ) / 100;
	operatingPressure	= parseFloat( form.operatingPressure.value ) * pressureUnits;	

	moveInterval	= setsPerLine * maxET;
	moveInterval	= maxNetDepth / moveInterval;
	moveInterval	= moveInterval * 24;

	form.maxMoveInterval.value = moveInterval;
	
	if( moveInterval < 10.5 )
	{
				document.getElementById( "cropStress" ).style.display = "block";
				document.getElementById( "cropStress" ).style.color = "red";
	}
	else
	{
				document.getElementById( "cropStress" ).style.display = "none";
		moveInterval = moveInterval % 12;
		if( moveInterval > 10 )
		{
			
			moveInterval = Math.floor( moveInterval / 12 ) * 12 + 12;
		}
		else
		{
			moveInterval = Math.floor( moveInterval / 12 ) * 12;	
		}
		
	}
	
	form.moveInterval.value = moveInterval;
	
	// suggested nozzle diameter - intermediate calculations
	sprinklerRunTime 	= moveInterval - ( nextSetMoveTime / 60 );	
	systemNetCapacity	= maxNetDepth / sprinklerRunTime;
	grossCapacity 		= systemNetCapacity / efficiency;
	flowRateReq			= ( grossCapacity * sprinklerSpacing * lineSpacing ) / 96.25025;
	nozzleDiameter 		= Math.sqrt( flowRateReq / ( 28.925 * Math.sqrt( operatingPressure ) ) ); 	
	nozzleDiameter		= Math.round( nozzleDiameter * 128, 0 );
	
	/* fraction sizes */
	form.nozzleDiameter.value = calc_nozzleDiameterSize( nozzleDiameter );
	
	
	// calculate suggested pipe size
	maxHeadsPerLine	= parseFloat( form.maxHeadsPerLine.value );
	maxFlowPerLine = flowRateReq * maxHeadsPerLine;	
	minInsideDiameter = Math.sqrt( 0.4085 * maxFlowPerLine / 5 );
	pipeSize = Math.ceil( minInsideDiameter );
	
	form.pipeSize.value = pipeSize;
	
	// calculate pipeline pressure differences
	elevationUnits		= parseFloat( form.elevationUnits.value );
	pressureDiffUnits	= parseFloat( form.pressureDiffUnits.value );
	
	elevationDifference	= parseFloat( form.elevationDifference.value ) * elevationUnits;

	frictionLoss = ( sprinklerSpacing * maxHeadsPerLine )/ 100;
	frictionLoss = frictionLoss * 455.2 *  Math.pow( ( maxFlowPerLine / 120 ), 1.852 ) * Math.pow( pipeSize, -4.87 );
	outletFactor = ( 2 * maxHeadsPerLine ) + 0.923038 / ( 6 * Math.pow( maxHeadsPerLine, 2 ) );
	outletFactor = 1 / outletFactor;
	outletFactor = 0.3050631 + outletFactor;
	frictionLoss = frictionLoss * outletFactor;
	pressureDifference = (-1 * frictionLoss) - (elevationDifference / 2.30666);
	pressureDifference = pressureDifference / pressureDiffUnits;
	form.pressureDifference.value = pressureDifference;
	
}

function calc_sprinklerDischarge( form ) 
{
	// conversion units
	can1Units 			= parseFloat( form.can1Units.value );
	can2Units 			= parseFloat( form.can2Units.value );
	can3Units 			= parseFloat( form.can3Units.value );
	can4Units 			= parseFloat( form.can4Units.value );
	timeUnits 			= parseFloat( form.timeUnits.value );
	sprinklerFlowUnits	= parseFloat( form.sprinklerFlowUnits.value );

	// converted values, variable short names
	can1	= parseFloat( form.can1.value ) / can1Units;
	can2	= parseFloat( form.can2.value ) / can2Units;
	can3	= parseFloat( form.can3.value ) / can3Units;
	can4	= parseFloat( form.can4.value )	/ can4Units;
	time	= parseFloat( form.time.value )	/ timeUnits;
	

	
	depth = can1 + can2 + can3 + can4 ;
	//can1 * 1 + can2 * 1 + can3 * 1 + can4 * 1;
	depth = depth / 4;
	
	rate = depth / time;

	sprinklerFlow = rate * 60;
	form.sprinklerFlow.value = sprinklerFlow * sprinklerFlowUnits;
}

function calc_bigGunWaterApplication( form )
	{

		flowRateUnits 		= parseFloat(form.flowRateUnits.value);
		widthUnits 			= parseFloat(form.widthUnits.value);
		speedUnits 			= parseFloat(form.speedUnits.value);
		netWaterAppUnits	= parseFloat(form.netWaterAppUnits.value);

		flowRate 	= parseFloat(form.flowRate.value) * flowRateUnits;
		width 		= parseFloat(form.width.value) / widthUnits;
		speed 		= parseFloat(form.speed.value) / speedUnits;
		efficiency 	= parseFloat(form.efficiency.value) / 100;

		netWaterApp = flowRate * 1.6 * efficiency;
		netWaterApp = netWaterApp / ( speed * width );
		netWaterApp = netWaterApp / netWaterAppUnits;
		netWaterApp = Math.round( netWaterApp * 10000 );

		form.netWaterApp.value = netWaterApp / 10000;
	}

// Traveling Sprinkler Acres per Pull
function calc_AcresPerPull( form )
{
laneSpacingUnits = parseFloat( form.laneSpacingUnits.value );
travelSpeedUnits = parseFloat( form.travelSpeedUnits.value );


laneSpacing = parseFloat( form.laneSpacing.value ) * laneSpacingUnits;
travelSpeed = parseFloat( form.travelSpeed.value ) * travelSpeedUnits;

timeRate = travelSpeed * laneSpacing / 726;
form.timeRate.value = timeRate;
}

// sprinkler lateral friction loss

function calc_lateralFrictionLoss( form )
{
spacingUnits = parseFloat( form.spacingUnits.value );
flowRateUnits = parseFloat( form.flowRateUnits.value );
sizeUnits = parseFloat( form.sizeUnits.value );
frictionUnits = parseFloat( form.frictionUnits.value );
totalFlowRateUnits = parseFloat( form.totalFlowRateUnits.value );
totalPipeLengthUnits = parseFloat( form.totalPipeLengthUnits.value );

sprinklersPerLine = parseFloat( form.sprinklersPerLine.value );
sprinklerSpacing = parseFloat( form.sprinklerSpacing.value ) / spacingUnits;
flowRate = parseFloat( form.flowRate.value ) * flowRateUnits;
pipeSize = parseFloat( form.pipeSize.value ) * sizeUnits;
coupler = parseFloat( form.coupler.value );


totalFlowRate = flowRate * sprinklersPerLine;
form.totalFlowRate.value = totalFlowRate / totalFlowRateUnits;

totalPipeLength = sprinklerSpacing * sprinklersPerLine;
form.totalPipeLength.value = totalPipeLength * totalPipeLengthUnits;

f = 0.15384 / Math.pow( sprinklersPerLine, 2 );
f = f + 0.5 / sprinklersPerLine;
f = 0.35063 + f;

frictionLoss = totalFlowRate / coupler;
frictionLoss = Math.pow( frictionLoss, 1.852 );
frictionLoss = frictionLoss * Math.pow( pipeSize, -4.87 );
frictionLoss = 4.552 * frictionLoss * totalPipeLength * f;
frictionLoss = frictionLoss / frictionUnits

form.frictionLoss.value = frictionLoss;
}

function clearText( thefield )
{
	if  ( thefield.defaultValue == thefield.value )
		thefield.value = "";
} 
