//
// Copyright 1996 by Mark E. (snowball3@geocities.com). All Rights Reserved.
// Based on the formulas used in meteorology
// Note: Comments will be sparse to minimize loading time.

var managerList = null;
var elemSize1=5;
var elemSize2=elemSize1+5;

function initWxObjs()
{
	var frm = document.ui;

	managerList = new managerListObject();

	var obj = new managerObject(frm.drybulb, frm.dbunit, new Temperature(), ioEnum.input, degreeUnitDefs, degreePrecisionDefs);
	managerList.addManager(obj, "drybulb");

	obj = new managerObject(frm.dewpoint, frm.dpunit, new Temperature(), ioEnum.input, degreeUnitDefs, degreePrecisionDefs);
	managerList.addManager(obj, "dewpoint");

	obj = new managerObject(frm.rh, null, new genericMetVariable(), ioEnum.input, null, genericPrecisionDefs);
	managerList.addManager(obj, "rh");

	obj = new managerObject(frm.heatidx, frm.heatidxunit, new Temperature(), ioEnum.output, degreeUnitDefs, degreePrecisionDefs);
	managerList.addManager(obj, "heatidx");
}

function validatePrompt (ctrl, prompt)
{
	alert (prompt);
	ctrl.focus();
	ctrl.select();
	return;
}
	
function validateTemp ( temp )
{
	if (temp.value.length==0)
	{
		validatePrompt (temp, "Temperature field is required.");
		return false;
	}
	return true;
}

function validateRh ( ctrl )
{
	var rh=0+ctrl.value;
	if ((rh < 0) || (rh > 100))
	{
		validatePrompt (ctrl, "Relative Humidity must be between 0 and 100.");
		return false;
	}
	return true;
}

function compute()
{
	var frm=document.ui;

	if (!validateTemp(frm.drybulb)) return;

	if (!validateRh(frm.rh)) return;

	var ml=managerList;
	var mlv=managerList.values;

	var haveTemp=mlv.drybulb.hasValue();
	var haveDp=mlv.dewpoint.hasValue();
	var haveRh=mlv.rh.hasValue();

	if (haveDp)
	{
		if (haveDp) calcWithDp(ml);
		haveRh=true;
	}

	var temp=mlv.drybulb.getValue(degreeEnum.fahr);
	if (haveRh)
		if (temp >= 70)
		{
			var rh=mlv.rh.getValue();
			var hi=calcHeatIndex2(temp, rh);
			mlv.heatidx.setValue(hi, degreeEnum.fahr);
		}

	managerList.output();
}

function getFormUnitType()
{
	var frm=document.forms.units;

	if (frm.unitselect[unitTypeEnum.english].checked)
		return unitTypeEnum.english;
	else if (frm.unitselect[unitTypeEnum.metric].checked)
		return unitTypeEnum.metric;

	return unitTypeEnum.scientific;
}

function calcWithDp(ml)
{
// Calculate the relative humidity and wetbulb given
// the ambient temperature (c), pressure (mb), and dewpoint (c)

	var mlv=ml.values;

	var dryb=mlv.drybulb.getValue(degreeEnum.celsius);
	var dp=mlv.dewpoint.getValue(degreeEnum.celsius);
	var es=calcVaporPressure(dryb);
	var e=calcVaporPressure(dp);

	mlv.rh.setValue(calcRelHumidity(e, es));
}

function startup()
{
	initWxObjs();
	var t=getFormUnitType()
	managerList.resetManagers(t);
}

function clearCtrls (curCtrl, ctrl1)
{
	if (curCtrl.value.length==0) return;

	ctrl1.manager.setValue("");
}


