  //convert any non-numeric value to a zero.
  function strToZero(anyval) {
    anyval = ""+anyval
    if (anyval.substring(0,1) < "0" || anyval.substring(0,1) > "9") {
     anyval = "0"
    }
    return eval(anyval)
  }

function currencyPad(anynum,width) {
        //returns number as string in $xxx,xxx.xx format.
        anynum = "" + eval(anynum)  //evaluate (in case an expression sent)
        intnum = parseInt(anynum)  //isolate integer portion
        intstr = ""+intnum
        //add comma in thousands place.
        if (intnum >= 1000) {
                intlen = intstr.length
                temp1=parseInt(""+(intnum/1000))
                temp2=intstr.substring(intlen-3,intlen)
                intstr = temp1+","+temp2
        }
        if (intnum >= 1000000) {
                intlen = intstr.length
                temp1=parseInt(""+(intnum/1000000))
                temp2=intstr.substring(intlen-7,intlen)
                intstr = temp1+","+temp2
        }
        decnum = Math.abs(parseFloat(anynum)-parseInt(anynum)) //isolate decimal portion
        decnum = decnum * 100 // multiply decimal portion by 100.
        decstr = "" + Math.abs(Math.round(decnum))
        while (decstr.length < 2) {decstr += "0"}
        retval = intstr + "." + decstr 
        if (intnum < 0) {
                retval=retval.substring(1,retval.length)
                retval="("+retval+")"
        }
        retval = "$"+retval
	//while (retval.length < width){retval=" "+retval}
	return retval
}
  var v = 1
  var x = 1
  var develtot = 0.0
  var basictot = 0.0
  var basic = 0.0
  var phon = 0.0
  var adroads = 0.0
  var orthototal = 0.0
  var orthototal2 = 0.0
  var triangtotal = 0.0
  var triangtotal2 = 0.0
  var planimtotal = 0.0
  var planimtotal2 = 0.0
  var cadastraltotal = 0.0
  var rubbertotal = 0.0
  var gpstraintot = 0.0
  var gpstraintothigh = 0.0
  var researchtot = 0.0
  var simple = 0.0
  var complex = 0.0
  var noneeds = 0.0
  var areatot = 0.0
  var partot = 0.0
  var e911tot = 0.0
  var utiltot = 0.0
  var hardtot = 0.0
  //var arcviewims = 10500.0
  var arcviewims = 0
  var cad = 0.0
  var plus = 0.0
  var arcview = 0.0
  var analyst = 0.0
  var moims = 0.0
  var noims = 0.0
  //var softtot = 13495.0
  softtot = 0
  var routetot = 0.0
  var needstot = 0.0
  var othertot = 0.0
  var phonestot = 0.0
  var adroadstot = 0.0

  function CalcOrthos(sqm)
	{ if (document.e911cost.ortho.checked==true)
		orthototal = sqm * 120.0
	  else orthototal = 0.0
	  return orthototal }

  function CalcOrthos200(sqm2)
	{ if (document.e911cost.ortho200.checked==true)
		orthototal200 = sqm2 * 400.0
	  else orthototal200 = 0.0
	  return orthototal200 }

  function CalcOrthos100(sqm1)
	{ if (document.e911cost.ortho100.checked==true)
		orthototal100 = sqm1 * 620.0
	  else orthototal100 = 0.0
	  return orthototal100 }

  function CalcTriang(sqm)
	{ if (document.e911cost.triang.checked==true)
		triangtotal = sqm * 22.0
	  else triangtotal = 0.0
	  return triangtotal }

  function CalcTriang200(sqm2)
	{ if (document.e911cost.triang200.checked==true)
		triangtotal200 = sqm2 * 50.0
	  else triangtotal200 = 0.0
	  return triangtotal200 }

  function CalcTriang100(sqm1)
	{ if (document.e911cost.triang100.checked==true)
		triangtotal100 = sqm1 * 70.0
	  else triangtotal100 = 0.0
	  return triangtotal100 }

  function CalcPlanim(sqm)
	{ if (document.e911cost.planim.checked==true)
		planimtotal = sqm * 129.0
	  else planimtotal = 0.0
	  return planimtotal }

  function CalcPlanim200(sqm2)
	{ if (document.e911cost.planim200.checked==true)
		planimtotal200 = sqm2 * 523.0
	  else planimtotal200 = 0.0
	  return planimtotal200 }

  function CalcPlanim100(sqm1)
	{ if (document.e911cost.planim100.checked==true)
		planimtotal100 = sqm1 * 550.0
	  else planimtotal100 = 0.0
	  return planimtotal100 }

  function CalcDigit(par)
      { if (document.e911cost.cadastral.checked==true)
		cadastraltotal = par * 2.75
	  else cadastraltotal = 0.0
	  return cadastraltotal }

  function CalcRubber(par)
	{ if (document.e911cost.rubbersheet.checked==true)
		rubbertotal = par * 2.75
	  else rubbertotal = 0.0
	  return rubbertotal }

  function CalcFlood(flood)
	{ floodtot = flood * 10.0
	{ if (floodtot < 600.0 && floodtot != 0.0)
		floodtot = 600.0
        else floodtot = flood * 10.0
	  return floodtot } }

  function CalcGpsTrain()
	{ if (document.e911cost.gpstrain.checked==true)
		gpstraintot = 900.0
	  else gpstraintot = 0.0
	  return gpstraintot }

  function CalcGpsTrainhigh()
	{ if (document.e911cost.gpstrainhigh.checked==true)
		gpstraintothigh = 1800.0
	  else gpstraintothigh = 0.0
	  return gpstraintothigh }

  function CalcBasic()
	{ if (document.e911cost.basic.checked==true)
		basictot = 24000.0
	  else basictot = 0.0
	  return basictot }

  function CalcNeeds(v) {
	  if (v != 1)
		{ if (v == 3)
			{ simple = 9000.0
			  complex = 0.0 }
	  	  else { complex = 15000.0
		  	   simple = 0.0 } }
	  else { complex = 0.0
	 	   simple = 0.0 } }

  function CalcIms(x) {
	  if (x != 3)
		{ if (x == 1)
			{ arcviewims = 10500.0
			  moims = 0.0 }
	  	  else { moims = 5000.0
		  	   arcviewims = 0.0 } }
	  else { moims = 0.0
	 	   arcviewims = 0.0 } }

  function CalcE911(y) {
	  if (y != 3)
		{ if (y == 1)
			{  var phon = strToZero(document.e911cost.phones.value)
				phonestot = phon * 25.0
			   adroadstot = 0.0 }
	  	  else { var adroads = strToZero(document.e911cost.adroads.value)
				adroadstot = adroads * 50.0
		  	   phonestot = 0.0 } }
	  else { adroadstot = 0.0
	 	   phonestot = 0.0 } }

  function CalcMonum(sqm) { return sqm * 32.0 }
  function CalcPhotog(sqm) { return sqm * 18.0 }
  function CalcMonum200(sqm2) { return sqm2 * 100.0 }
  function CalcPhotog200(sqm2) { return sqm2 * 32.0 }
  function CalcMonum100(sqm1) { return sqm1 * 150.0 }
  function CalcPhotog100(sqm1) { return sqm1 * 54.0 }
  function CalcPhones(phon) { return phon * 25.0 }
  function CalcAdroads(adroads) { return adroads * 50.0 }
  function CalcResearch(hour) { return hour * 50.0 }

  function CalcWater(water) { return water * 235.0 }
  function CalcSewer(sewer) { return sewer * 225.0 }
  function CalcStorm(storm) { return storm * 225.0 }
  function CalcElec(elec)   { return elec  * 225.0 }
  function CalcGas(gas)     { return gas   * 225.0 }

  function CalcSheets(sheets) { return sheets * 40.0 }
  function CalcGps(gps) { return gps * 3900.0 }
  function CalcGpshigh(gpshigh) { return gpshigh * 11000.0 }
  function CalcZone(zone) { return zone * 0.33 }
  function CalcAnalyst(analyst) { 
  	//return analyst * 1495.0 
  	return 0
  }
  function CalcRoads(roads) { return roads * 5.0 }
  function CalcPuter(computer) { return computer * 2500.0 }
  function CalcServer(server) { return server * 5000.0 }
  function CalcNetwork(network) { return network * 5000.0 }
  function CalcPlotter(plotter) { return plotter * 6500.0 }
  function CalcPrinter(printer) { return printer * 300.0 }
  function CalcDigitizer(digitizer) { return digitizer * 2000.0 }
  function CalcScanner(scanner) { return scanner * 250.0 }
  function CalcSigns(intersect) { return intersect * 160.0 }
  function CalcArcview(arcview) { 
  	//return arcview * 1100.0 
  	return 0
  }
  function CalcCad(cad) { 
  	//return cad * 3100.0 
  	return 0
  }
  function CalcPlus(plus) { 
  	//return plus * 4995.0 
  	return 0
  }
  function CalcService(service) { return service * 200.0 }
  function CalcDevel(devel) { return devel * 54.25 }

  function LoadPage() {
     UpdateNeeds(v)
     UpdateSoft(x)
     UpdateDevel()
     arcviewims = 0
     moims = 0
     noims = 0
     document.e911cost.arcviewimsup.value=currencyPad(arcviewims,14)
     document.e911cost.moimsup.value=currencyPad(moims,14)
     document.e911cost.noims.value=currencyPad(noims,14)
     UpdateSoftTotal()

  }
  function UpdateArea() {
     var sqm = strToZero(document.e911cost.sqmiles.value)
     document.e911cost.monument.value=currencyPad(CalcMonum(sqm),14)
     document.e911cost.photog.value=currencyPad(CalcPhotog(sqm),14)
     document.e911cost.triangs.value=currencyPad(CalcTriang(sqm),14)
     document.e911cost.orthos.value=currencyPad(CalcOrthos(sqm),14)
     document.e911cost.planims.value=currencyPad(CalcPlanim(sqm),14)
     var areatot = CalcMonum(sqm) + CalcPhotog(sqm) + triangtotal + orthototal + planimtotal
     document.e911cost.areatotal.value=currencyPad(areatot,14)
  }
  function UpdateArea200() {
     var sqm2 = strToZero(document.e911cost.sqmiles200.value)
     document.e911cost.monument200.value=currencyPad(CalcMonum200(sqm2),14)
     document.e911cost.photog200.value=currencyPad(CalcPhotog200(sqm2),14)
     document.e911cost.triangs200.value=currencyPad(CalcTriang200(sqm2),14)
     document.e911cost.orthos200.value=currencyPad(CalcOrthos200(sqm2),14)
     document.e911cost.planims200.value=currencyPad(CalcPlanim200(sqm2),14)
     var areatot200 = CalcMonum200(sqm2) + CalcPhotog200(sqm2) + triangtotal200 + orthototal200 + planimtotal200
     document.e911cost.areatotal200.value=currencyPad(areatot200,14)
  }
  function UpdateArea100() {
     var sqm1 = strToZero(document.e911cost.sqmiles100.value)
     document.e911cost.monument100.value=currencyPad(CalcMonum100(sqm1),14)
     document.e911cost.photog100.value=currencyPad(CalcPhotog100(sqm1),14)
     document.e911cost.triangs100.value=currencyPad(CalcTriang100(sqm1),14)
     document.e911cost.orthos100.value=currencyPad(CalcOrthos100(sqm1),14)
     document.e911cost.planims100.value=currencyPad(CalcPlanim100(sqm1),14)
     var areatot100 = CalcMonum100(sqm1) + CalcPhotog100(sqm1) + triangtotal100 + orthototal100 + planimtotal100
     document.e911cost.areatotal100.value=currencyPad(areatot100,14)
  }
  function UpdateCadastral() {
     var par = strToZero(document.e911cost.cadastrals.value)
     var hour = strToZero(document.e911cost.research.value)
     var partot = 0.0
     document.e911cost.digit.value=currencyPad(CalcDigit(par),14)
     document.e911cost.rubber.value=currencyPad(CalcRubber(par),14)
     document.e911cost.researchup.value=currencyPad(CalcResearch(hour),14)
     var partot = cadastraltotal + rubbertotal + CalcResearch(hour)
     document.e911cost.cadastraltot.value=currencyPad(partot,14)
  }
  function UpdateE911() {
     var intersect = strToZero(document.e911cost.signs.value)
     var phon = strToZero(document.e911cost.phones.value)
	  var adroads = strToZero(document.e911cost.adroads.value)
     document.e911cost.signsup.value=currencyPad(CalcSigns(intersect),14)
     document.e911cost.phonesup.value=currencyPad(CalcPhones(phon),14)
     document.e911cost.adroadsup.value=currencyPad(CalcAdroads(adroads),14)
     var e911tot = CalcPhones(phon) + CalcAdroads(adroads) + CalcSigns(intersect)
	  document.e911cost.e911tot.value=currencyPad(e911tot,14)
  }

	function UpdateUtil() {
    	var water = strToZero(document.e911cost.util_water.value);
    	var sewer = strToZero(document.e911cost.util_sewer.value);
		var storm = strToZero(document.e911cost.util_storm.value);
		var elec  = strToZero(document.e911cost.util_elec.value);
		var gas   = strToZero(document.e911cost.util_gas.value);

    	document.e911cost.util_water_up.value = currencyPad(CalcWater(water),14);
    	document.e911cost.util_sewer_up.value = currencyPad(CalcSewer(sewer),14);
		document.e911cost.util_storm_up.value = currencyPad(CalcStorm(storm),14);
		document.e911cost.util_elec_up.value  = currencyPad(CalcElec(elec),14);
		document.e911cost.util_gas_up.value   = currencyPad(CalcGas(gas),14);

     	var utiltot = CalcWater(water) + CalcSewer(sewer) + CalcStorm(storm) + CalcElec(elec) + CalcGas(gas);
		document.e911cost.util_total.value=currencyPad(utiltot,14);
  }

  function UpdateHard() {
     var computer = strToZero(document.e911cost.computer.value)
     var server = strToZero(document.e911cost.server.value)
     var network = strToZero(document.e911cost.network.value)
     var plotter = strToZero(document.e911cost.plotter.value)
     var printer = strToZero(document.e911cost.printer.value)
     var digitizer = strToZero(document.e911cost.digitizer.value)
     var scanner = strToZero(document.e911cost.scanner.value)
     var gps = strToZero(document.e911cost.gps.value)
     var gpshigh = strToZero(document.e911cost.gpshigh.value)
     document.e911cost.computerup.value=currencyPad(CalcPuter(computer),14)
     document.e911cost.serverup.value=currencyPad(CalcServer(server),14)
     document.e911cost.networkup.value=currencyPad(CalcNetwork(network),14)
     document.e911cost.plotterup.value=currencyPad(CalcPlotter(plotter),14)
     document.e911cost.printerup.value=currencyPad(CalcPrinter(printer),14)
     document.e911cost.digitizerup.value=currencyPad(CalcDigitizer(digitizer),14)
     document.e911cost.scannerup.value=currencyPad(CalcScanner(scanner),14)
     document.e911cost.gpsup.value=currencyPad(CalcGps(gps),14)
     document.e911cost.gpsuphigh.value=currencyPad(CalcGpshigh(gpshigh),14)
     document.e911cost.gpstrainup.value=currencyPad(CalcGpsTrain(),14)
     document.e911cost.gpstrainuphigh.value=currencyPad(CalcGpsTrainhigh(),14)
     var hardtot = CalcPuter(computer) + CalcServer(server) + CalcNetwork(network) + CalcPlotter(plotter) + CalcPrinter(printer) + CalcDigitizer(digitizer) + CalcScanner(scanner) + gpstraintot + CalcGps(gps) + CalcGpshigh(gpshigh) + gpstraintothigh
     document.e911cost.hardtot.value=currencyPad(hardtot,14)
  }
  
  /*
  function UpdateSoft(x) {
     CalcIms(x)
     document.e911cost.arcviewimsup.value=currencyPad(arcviewims,14)
     document.e911cost.moimsup.value=currencyPad(moims,14)
     document.e911cost.noims.value=currencyPad(noims,14)
     UpdateSoftTotal()
  }
  function UpdateSoft2() {
     var cad = strToZero(document.e911cost.cadnum.value)
     var plus = strToZero(document.e911cost.plus.value)
     var arcview = strToZero(document.e911cost.arcview.value)
     var analyst = strToZero(document.e911cost.analyst.value)
     document.e911cost.cadup.value=currencyPad(CalcCad(cad),14)
     document.e911cost.plusup.value=currencyPad(CalcPlus(plus),14)
     document.e911cost.arcviewup.value=currencyPad(CalcArcview(arcview),14)
     document.e911cost.analystup.value=currencyPad(CalcAnalyst(analyst),14)
     UpdateSoftTotal()
  }
  function UpdateSoftTotal() {
     var cad = strToZero(document.e911cost.cadnum.value)
     var plus = strToZero(document.e911cost.plus.value)
     var arcview = strToZero(document.e911cost.arcview.value)
     var analyst = strToZero(document.e911cost.analyst.value)
     var softtot = CalcArcview(arcview) + CalcCad(cad) + CalcAnalyst(analyst) + arcviewims + moims + CalcPlus(plus)
     document.e911cost.softtot.value=currencyPad(softtot,14)
  }
  */
  
  function UpdateRoute() {
     var roads = strToZero(document.e911cost.roads.value)
     document.e911cost.roadsup.value=currencyPad(CalcRoads(roads),14)
     var routetot = CalcRoads(roads)
     document.e911cost.routetot.value=currencyPad(routetot,14)
  }
  function UpdateNeeds(v) {
     CalcNeeds(v)
     document.e911cost.simneedsup.value=currencyPad(simple,14)
     document.e911cost.comneedsup.value=currencyPad(complex,14)
     document.e911cost.noneeds.value=currencyPad(noneeds,14)
     var needstot = complex + simple
     document.e911cost.needstot.value=currencyPad(needstot,14)
  }
  function UpdateDevel() {
     var devel = strToZero(document.e911cost.develop.value)
     document.e911cost.develtot.value=currencyPad(CalcDevel(devel),14)
     document.e911cost.basictot.value=currencyPad(CalcBasic(),14)
     var develsub = CalcDevel(devel) + basictot
     document.e911cost.develsub.value=currencyPad(develsub,14)
  }
  function UpdateOther() {
     var sheets = strToZero(document.e911cost.sheets.value)
     var zone = strToZero(document.e911cost.zone.value)
     var flood = strToZero(document.e911cost.flood.value)
     var service = strToZero(document.e911cost.service.value)
     document.e911cost.sheetsup.value=currencyPad(CalcSheets(sheets),14)
     document.e911cost.zoneup.value=currencyPad(CalcZone(zone),14)
     document.e911cost.floodup.value=currencyPad(CalcFlood(flood),14)
     document.e911cost.serviceup.value=currencyPad(CalcService(service),14)
     var othertot = CalcSheets(sheets) + CalcZone(zone) + floodtot + CalcService(service)
     document.e911cost.othertot.value=currencyPad(othertot,14)
  }
  function UpdateTotal() {
     var sqm = strToZero(document.e911cost.sqmiles.value)
     var sqm2 = strToZero(document.e911cost.sqmiles200.value)
     var sqm1 = strToZero(document.e911cost.sqmiles100.value)
     var par = strToZero(document.e911cost.cadastrals.value)
     var phon = strToZero(document.e911cost.phones.value)

     var water = strToZero(document.e911cost.util_water.value);
     var sewer = strToZero(document.e911cost.util_sewer.value);
     var storm = strToZero(document.e911cost.util_storm.value);
     var elec = strToZero(document.e911cost.util_elec.value);
     var gas = strToZero(document.e911cost.util_gas.value);

     var adroads = strToZero(document.e911cost.adroads.value)
     var sheets = strToZero(document.e911cost.sheets.value)
     var gps = strToZero(document.e911cost.gps.value)
     var gpshigh = strToZero(document.e911cost.gpshigh.value)
     var phones = strToZero(document.e911cost.phones.value)
     var adroads = strToZero(document.e911cost.adroads.value)
     var zone = strToZero(document.e911cost.zone.value)
     //var analyst = strToZero(document.e911cost.analyst.value)
     var roads = strToZero(document.e911cost.roads.value)
     var flood = strToZero(document.e911cost.flood.value)
     var computer = strToZero(document.e911cost.computer.value)
     var plotter = strToZero(document.e911cost.plotter.value)
     //var arcview = strToZero(document.e911cost.arcview.value)
     var service = strToZero(document.e911cost.service.value)
	 // var plus = strToZero(document.e911cost.plus.value)
     //var cad = strToZero(document.e911cost.cadnum.value)
     var server = strToZero(document.e911cost.server.value)
     var network = strToZero(document.e911cost.network.value)
     var printer = strToZero(document.e911cost.printer.value)
     var digitizer = strToZero(document.e911cost.digitizer.value)
     var scanner = strToZero(document.e911cost.scanner.value)
     var hour = strToZero(document.e911cost.research.value)
     var intersect = strToZero(document.e911cost.signs.value)
 
     var devel = strToZero(document.e911cost.develop.value)
     var tot = 0.0
     tot = CalcMonum(sqm) + CalcPhotog(sqm) + CalcTriang(sqm)
     tot = tot + CalcMonum200(sqm2)
     tot = tot + CalcMonum100(sqm1)
     tot = tot + CalcPhotog200(sqm2)
     tot = tot + CalcPhotog100(sqm1)
     tot = tot + CalcTriang200(sqm2)
     tot = tot + CalcTriang100(sqm1)
     tot = tot + CalcPhones(phones)
     tot = tot + CalcPlanim200(sqm2) + CalcAdroads(adroads)
     tot = tot + CalcPlanim100(sqm1)
     tot = tot + CalcOrthos(sqm) + CalcOrthos200(sqm2) + CalcPlanim(sqm) + CalcDevel(devel) + basictot
     tot = tot + CalcOrthos100(sqm1)
     tot = tot + CalcDigit(par) + CalcRubber(par) + phonestot
     tot = tot + CalcWater(water) + CalcSewer(sewer) + CalcStorm(storm) + CalcElec(elec) + CalcGas(gas);
     tot = tot + adroadstot + CalcSheets(sheets) + CalcGps(gps) + CalcGpshigh(gpshigh)
     tot = tot + CalcGpsTrain() + CalcGpsTrainhigh() + CalcZone(zone) + simple
     tot = tot + complex + CalcAnalyst(analyst) + CalcRoads(roads)
     tot = tot + CalcFlood(flood) + CalcPlus(plus) + CalcPuter(computer) + CalcPlotter(plotter)
     tot = tot + CalcArcview(arcview) + CalcService(service)
	 tot = tot + CalcCad(cad) + CalcServer(server) + CalcNetwork(network)
     tot = tot + CalcPrinter(printer) + CalcDigitizer(digitizer) + CalcScanner(scanner)
     tot = tot + moims + CalcResearch(hour) + CalcSigns(intersect)
     document.e911cost.total.value=currencyPad(tot,14)
}