var gas = { 'units':'Mcf','btu_per_unit':1026000,'price':13.5,'co2':116.53 };
var oil = { 'units':'gal','btu_per_unit':138700,'price':3.8,'co2':159.83 };
var lpg = { 'units':'gal','btu_per_unit':9500,'price':3,'co2':138.29 };
var coal = { 'units':'ton','btu_per_unit':25000000,'price':100,'co2':208.3 };
var electricity = { 'units':'kWh','btu_per_unit':3414,'price':.097,'co2':425.5 };
var form;

function initialize() {
	form=$('calc_form');
	$('fuel').onchange = changeCalc;
	changeCalc();
	$A($$('.user_input')).each(function(item) {
		item.onchange=function() { changeCalc(); };				
	});
}

function changeCalc() {
	$A($$('.user_input')).each(function(item) {								
		if(isNaN(item.value)) {
			item.focus();
			alert('Inputs must contain numbers only!');
			return;
		}
	});
	var fuel = eval(form.fuel.value);
	var o_temp = parseFloat(form.operating_temp.value);
	var a_temp = parseFloat(form.ambient_temp.value);
	var surface_area = parseFloat(form.surface_area.value);
	var efficiency = parseFloat(form.efficiency.value);
	var operating_hours = parseFloat(form.operating_hours.value);
	var installed_cost = parseFloat(form.installed_cost.value);
	var expected_life = parseFloat(form.life_span.value);
	var emittance = parseFloat(form.emittance.value);
	var wind_speed = parseFloat(form.wind_speed.value);
	var randomRatio = parseFloat(0.25/300);
	var randomNumbers = [3.0796,1.7841,1.8248,1.8421,1.8516,1.8576,1.8617,1.8647,1.8670,1.8688,1.8608];
	var conductivity = parseFloat(form.conductivity.value);
	$('units').innerHTML = fuel['units'];
	$('cost').innerHTML = fuel['price'];
	$('btu').innerHTML = fuel['btu_per_unit'];
	
	
	/*var randomVar = .1714 * emittance * Math.pow(((t_surface+459.67)/100),4) - Math.pow(((a_temp + 459.67)/100),4) / ( (t_surface+459.67) - (a_temp + 459.67) );/*
	->surface temp = c_B35
	c_B35 = 
		b34 = b12 - b32*b23
			b12 = if(o_temp = a_temp)o_temp + 0.1; else o_temp
			b23 = b22/b21
				b22 = .25
				b21 = 300
		b32 = (b12-b15)/b30
			b15 = a_temp
			b30 = b23+b28+1/b17
				B17 = vflatB45
					vfB45 = b15+b41
					vfB15 = .1714 * B8 * (B12^4 - B13^4)/(B10 - B11)
						vfB8 = emittance
						vfB12 = B10/100
							vfB10 = B3+459.67
								vfB3 = c_B14
									c_B14 = b35
									c_B35 = 
		b28 = b27/b26
			b27 = thickness
			b26 = conductivity*/
			var done = false;
	var original_s;
	var original_cf=null;
	var b12,b23,b15,b28,b14,pad3,pad4,pad5,pad6,pad7,pad11,pad12,pad13,pad16,pad17,pad18,pad21,pad25,pad28,pad32,pad36,pad40,vfb40,vfb45;
	var vfb4,vfb4,vfb5,vfb6,vfb7,vfb8,vfb10,vfb11,vfb12,vfb13,vfb15,vfb19,vfb20,vfb21,vfb22,vfb23,vfb24,vfb27,vfb28,vfb30,vfb31,vfb32,vfb33,vfb35,vfb36,vfb28,vfb41;
	var b17,b30,b32,b34,b35;
	//var b14,b15,b16,b17,b18,b19,b20,b21
	vfb40 = [3,3,3,3,3,3,3,3,3,3,13];
	for (i=1; i<12; i++) {
		var randomRatio2 = parseFloat(1/randomNumbers[i-1]);
		var thickness = parseFloat($('t_'+i).innerHTML);
		var toverc = parseFloat(thickness/conductivity);
		var ora = (o_temp - a_temp)/(randomRatio + toverc + randomRatio2);
		
		
		if(o_temp==a_temp) b12 = o_temp + 0.1; else b12 = o_temp;
		b23 = parseFloat(randomRatio);
		b15 = parseFloat(a_temp);
		b28 = parseFloat(toverc);
		
		
		for(test=0; test<100; test++) {
		if(b14) b14 = b35;
		else b14 = o_temp-0.95*(o_temp-a_temp); //???
	
		
									
		pad3 = b14;
		pad4 = a_temp;
		pad5 = (pad3+pad4)/2;
		pad6 = pad5+459.67;
		pad7 = pad6/1.8;
		pad11 = 0.000006325*Math.sqrt(pad7)*241.77;
		pad12 = 1+(245.4*Math.pow(10,(-12/pad7)))/pad7;
		pad13 = pad11/pad12;
		pad16 = 145.8*pad7*Math.sqrt(pad7)*0.00002419;
		pad17 = pad7+110.4;
		pad18 = pad16/pad17;
		pad21 = 0.7189-pad5*(0.00016349-pad5*(0.00000018106-0.000000000056617*pad5));
		pad25 = 1/(1.8*pad7);
		pad28 = 22.0493/pad7;
		pad32 = pad18/pad28;
		pad36 = 0.24008-pad5*(0.0000012477-pad5*(0.000000040489-pad5*0.000000000016088));
		pad40 = 32.174*3600*3600*pad25*pad28*pad36/(pad32*pad13);
		
		
		
	
		vfb3 = b14; //???
		vfb4 = a_temp;
		vfb5 = Math.abs(wind_speed*5280);
		vfb6 = vfb3-vfb4;
		vfb7 = 10;
		if(i==1)vfb8 = 0.8; else vfb8=emittance;
		vfb10 = vfb3+459.67; 
		vfb11 = vfb4+459.67;
		vfb12 = vfb10/100;
		vfb13 = vfb11/100;
		vfb15 = .1714 * vfb8 * (Math.pow(vfb12,4) - Math.pow(vfb13,4))/(vfb10 - vfb11);	
		vfb19 = pad40*Math.abs(vfb6)*Math.pow(vfb7,3);
		vfb20 = 0.387*Math.pow((vfb19),0.166667);
		vfb21 = Math.pow((1+Math.pow((0.492/pad21),0.5625)),0.296296);
		vfb22 = 0.825+vfb20/vfb21;
		vfb23 = Math.pow(vfb22,2);
		vfb24 = vfb23*pad13/vfb7;
		vfb27 = vfb5*vfb7/pad32;
		vfb28 = pad21;
		vfb30 = 0.6774*Math.sqrt(vfb27)*Math.pow(vfb28,(1/3));
		vfb31 = Math.pow( (1 + Math.pow( (0.0468/vfb28),(2/3) )),0.25 );
		vfb32 = vfb30/vfb31;
		vfb33 = pad13*vfb32/vfb7;
		vfb35 = (0.037*Math.pow(vfb27,0.8)-871)*Math.pow(vfb28,(1/3));
		vfb36 = vfb35*pad13/vfb7;
		if(vfb27>500000)vfb38 = vfb36; else vfb38 = vfb33;
		vfb41 = Math.pow( (Math.pow( (vfb38),vfb40[i-1] ) + Math.pow( vfb24, vfb40[i-1] )), ( 1/vfb40[i-1] ));
		 
		
									
									
									
										
											
											
										
											
																				
						 	  	
								
								
								
		
		
		
		vfb45 = vfb15 + vfb41; //= ((vfb38)^3+(vfb24)^vfb40)^(1/vfb40) + .1714 * emittance * ((vfb3+459.67)/100)^4 - ((a_temp+459.67)/100)^4)/(vfb10 - vfb11);
		b17 = vfb45;
		//if(isNaN(b17) && !done) { done=true; alert(vfb31); }
		b30 = b23+b28+1/b17;
		b32 = (b12-b15)/b30;
		b34 = b12 - b32*b23;
		b35 = b34 - b32*b28;
		//if(test==99 && i==1) { alert(b28); }
		}
		//alert(b17);
		
		
		
		
		//alert(b30);
		var scalculation = b35;
		var hlcalculation = surface_area*b32;
		var cfcalculation = Math.abs(parseFloat(100*hlcalculation*operating_hours*fuel['price']/(fuel['btu_per_unit']*efficiency)).toFixed(2));
		if(i==1)original_cf = cfcalculation;
		var pcalculation = Math.abs(12 * installed_cost * surface_area * thickness/(original_cf - cfcalculation));
		if(12/pcalculation>1) {
			var rcalculation = Math.round(12/pcalculation*100);	
		}
		else { 
			rcalculation = Math.round( rate( expected_life,(original_cf-cfcalculation),-1*surface_area*installed_cost*thickness,0,'',(12/pcalculation) )*100);
		}
		var ecalculation = Math.round(hlcalculation*operating_hours*fuel['co2']/(10000*efficiency));
		
		
		
		if(isNaN(rcalculation))rcalculation = 'N/A'; else rcalculation+='%';
		if(isNaN(pcalculation))pcalculation = 'N/A'; else pcalculation = pcalculation.toFixed(1);
		
		$('st_'+i).innerHTML = (Math.round(scalculation*10)/10).toFixed(1);
		$('hl_'+i).innerHTML = Math.round(hlcalculation);
		$('c_'+i).innerHTML = Math.abs(cfcalculation);
		$('p_'+i).innerHTML = pcalculation;
		$('ar_'+i).innerHTML = rcalculation;
		$('e_'+i).innerHTML = Math.abs(ecalculation);
		
		
		
		
		//c02 = hl*operating_hours*fuel['co2']/(10000*efficiency)
	}
	

}
function rate(nper,pmt,pv,fv,type,guess){
	//if(!isFinite(guess)||!isFinite(type)||!isFinite(fv)||!isFinite(pv)||!isFinite(pmt)||!isFinite(nper))alert(type);
	var type2=(type)?1:0;
	//alert('nper:'+nper+'\n'+'pmt:'+pmt+'\n'+'pv:'+pv+'\n'+'fv:'+fv+'\nguess:'+guess+'\n');
	var wanted_precision=0.00000001;
	var current_diff=Number.MAX_VALUE;
	var x,next_x,y,z;
	if(guess==0) x=0.1;
	else x=guess;
	var max_iterations=100;
	var iterations_done=0;
	while(current_diff>wanted_precision&&iterations_done<max_iterations){
		if(x==0)next_x=x-(pv+pmt*nper+fv)/(pv*nper+pmt*(nper*(nper-1)+2*type2*nper)/2);
		else
		{
			y=Math.pow(1+x,nper-1);
			z=y*(1+x);
			next_x=x*(1-(x*pv*z+pmt*(1+x*type2)*(z-1)+x*fv)/(x*x*nper*pv*y-pmt*(z-1)+x*pmt*(1+x*type2)*nper*y));
		}
		iterations_done++;
		current_diff=Math.abs(next_x-x);
		x=next_x;
	}
	if(guess==0 && Math.abs(x) < wanted_precision)x=0;
	if(current_diff>=wanted_precision) return Number.NaN;
	else return x;
}
