// JavaScript Document//Core Communications rewrite Feb 7 20003 to allow multiple categories, etc.//initialize associative arrays, etc. in global scope//updates will be implemented merely by changing fields values (some hidden)itemSelect=new Object;itemKWh   =new Object;itemCost  =new Object;itemMonthKWh=new Object;itemCategory = new Object;costPerKWh= 0.0820;//set as a constantcategoryTotalKWh=new Object;categoryTotalCost=new Object;function fillArrays() {var f, e, theElement, itemName, code;for(f=0;f<document.forms.length;f++) {for(e=0;e<document.forms[f].elements.length;e++) {theElement=document.forms[f].elements[e];code='Select'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));	itemSelect[itemName]=theElement;//alert("Found select for "+itemName+" ("+theElement.name+")");//testing	}code='itemCategory'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));	itemCategory[itemName]=theElement;//alert("Found type for "+itemName+" ("+theElement.name+")");//testing	}code='MonthKWh'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));//alert("Found monthlyKWh for "+itemName+" ("+theElement.name+")");//testing	itemMonthKWh[itemName]=theElement;	}code='KWhField'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));	itemKWh[itemName]=theElement;//alert("Found kwh for "+itemName+" ("+theElement.name+")");//testing	}code='CostField'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));//alert("Found cost for "+itemName+" ("+theElement.name+")");//testing	itemCost[itemName]=theElement;	}	code='TotalKWh'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));//alert("Found TotalKWh for "+itemName+" ("+theElement.name+")");//testing	categoryTotalKWh[itemName]=theElement;	}code='TotalCost'; if (theElement.name.indexOf(code) == (theElement.name.length-code.length)) {	itemName=theElement.name.substring(0,theElement.name.indexOf(code));//alert("Found TotalCost for "+itemName+" ("+theElement.name+")");//testing	categoryTotalCost[itemName]=theElement;	}if (theElement.name=='finalHeatingCost') finalHeatingCostField=theElement;if (theElement.name=='finalHeatingKWh') finalHeatingKWhField=theElement;if (theElement.name=='finalCost') finalCostField=theElement;if (theElement.name=='finalKWh') finalKWhField=theElement;}}//for elements and forms}//f fillArraysfunction updateItem(thisSelect) {//call via onchange="updateItem(this)"	var thisItemName, thisSelect;	thisItemName=thisSelect.name.substring(0,thisSelect.name.indexOf('Select'));//alert("Updating "+thisItemName+": \nqty="+thisSelect.options[thisSelect.selectedIndex].value+"\nitemMonthKWh="+itemMonthKWh[thisItemName].value);//testing	itemKWh[thisItemName].value=Math.round(parseFloat(thisSelect.options[thisSelect.selectedIndex].value)*parseFloat(itemMonthKWh[thisItemName].value));	itemCost[thisItemName].value=round2(parseFloat(itemKWh[thisItemName].value)*costPerKWh);	updateCategoryTotals();	}//f updateItemfunction updateCategoryTotals() {	var categoryName, itemName, total;	total=new Number(0.0);	for (categoryName in categoryTotalCost) {	total=0.0;		for(itemName in itemCost) {			if (itemCategory[itemName].value==categoryName) {				if (! isNaN(parseFloat(itemCost[itemName].value))) {					total=total+parseFloat(itemCost[itemName].value);					}//if numeric value in cost				}//if right type			}//for all itemCosts		categoryTotalCost[categoryName].value=round2(total);		}//for all categoryTotalCosts	for (typeName in categoryTotalKWh) {	total=0.0;		for(itemName in itemKWh) if (itemCategory[itemName].value==typeName) if (! isNaN(parseFloat(itemKWh[itemName].value))) total=total+parseFloat(itemKWh[itemName].value);		categoryTotalKWh[typeName].value=Math.round(total);		}	finalCalculations();	}//f updateCategoryTotalsfunction finalCalculations() {	var heatKWh, elecKWh, altKWh;	elecKWh=(isNaN(parseFloat(categoryTotalKWh['elecHeat'].value))?0:parseFloat(categoryTotalKWh['elecHeat'].value));	altKWh=(isNaN(parseFloat(categoryTotalKWh['altHeat'].value))?0:parseFloat(categoryTotalKWh['altHeat'].value));	heatKWh=elecKWh-(Math.min(altKWh,elecKWh*0.8));	finalHeatingKWhField.value=Math.round(heatKWh);	finalHeatingCostField.value=round2((isNaN(parseFloat(finalHeatingKWhField.value))?0:parseFloat(finalHeatingKWhField.value))*costPerKWh);	finalKWhField.value=Math.round((isNaN(parseFloat(categoryTotalKWh['household'].value))?0:parseFloat(categoryTotalKWh['household'].value))+(isNaN(parseFloat(finalHeatingKWhField.value))?0:parseFloat(finalHeatingKWhField.value)));	finalCostField.value=round2(12+(isNaN(parseFloat(finalKWhField.value))?0:parseFloat(finalKWhField.value))*costPerKWh);}//f finalCalculationsfunction round2(x) {	var x,s;	x=parseFloat(x);	x=Math.round(x*100)/100;	s=x.toString();	if(s.indexOf('.')==-1) return(s+".00");	if(s.indexOf('.')==s.length-1) return(s+"00");	if(s.indexOf('.')==s.length-2) return(s+"0");	if(s.indexOf('.')==s.length-3) return(s);	return(Math.round(x*100)/100);//give up on figuring it out	}//f round2function callJS(jsStr) {  return eval(jsStr)}function MM_reloadPage(init) {  //reloads the window if Nav4 resized  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}MM_reloadPage(true);function MM_callJS(jsStr) { //v2.0  return eval(jsStr)}function MM_findObj(n, d) { //v4.01  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);  if(!x && d.getElementById) x=d.getElementById(n); return x;}
