PageSourceSearch

https://statensolar.com/irr.js

js statensolar.com collected 2026-10-04 20:37:40 UTC 9,319 bytes, 413 lines download raw bytes

1function testfld(x1)
2{
3
4var x2=x1.length;
5var y = 0;
6var z = "";
7var fd = 0;
8
9 for (y=0; y<x2; y++) {
10 z = x1.substr(y,1);
11 if (z < "0" || z > "9") {
12   if (z==".") {
13    if(fd==0) {
14    fd=1;
15    continue;
16    } else {
17    editerr="y";
18    alert ("Only ONE decimal allowed.");
19    return 1;
20    }
21    } 
22    else {
23    alert("Only numbers and a decimal allowed.");
24    editerr = "y";
25    return 1;
26   }
27  }
28 }
29 return 0;
30}
31
32
33
34function clearflds()
35{ 
36// document.irrcalc.eirr.value = ""; 
37// document.irrcalc.pirr.value = ""; 
38}
39
40function snpv(arr,len,rate) 
41{
42var ans=0.0;
43
44 for (j=1; j<=len; j++) {
45  ans += arr[j]/Math.pow(1+rate,j);
46 }
47return ans;
48
49}
50
51function findErrors()
52{
53
54var onm = document.irrcalc.onm.value;
55var esconm = document.irrcalc.esconm.value;
56var sysd = document.irrcalc.sysd.value;
57var fitp = document.irrcalc.fitplan.value;
58var fit2 = document.irrcalc.fit2.value;
59var capx=document.irrcalc.capex.value;
60
61if (testfld(capx)) {
62    document.irrcalc.capex.value="";
63    return 1;
64 }
65
66if (capx == "" || capx == "." || (parseFloat(capx)==0.0)) {
67alert ("Fill in a valid value for Total Project Cost.");
68return 1;
69} 
70
71var angen=document.irrcalc.anngen.value;
72if (testfld(angen)) {
73    document.irrcalc.anngen.value="";
74    return 1;
75}
76
77if (angen == "" || angen == "." || (parseFloat(angen)==0.0)) {
78alert ("Fill in a valid value for Annual Generation.");
79return 1;
80} 
81
82
83var fit = document.irrcalc.fit.value;
84
85 if(testfld(fit)) {
86   document.irrcalc.fit.value="";
87   return 1;
88 }
89 
90 if (fit == "" || fit == "." || (parseFloat(fit)==0.0)) {
91	 if(fitp)
92 alert ("Fill in a valid value for Feed In Tariff for years 1-12.");
93	 else
94 alert ("Fill in a valid value for Feed In Tariff.");
95 return 1;
96 } 
97
98
99 if(testfld(fit2)) {
100   document.irrcalc.fit2.value="";
101   return 1;
102 }
103 
104 if (fit2 == "" || fit2 == "." ) {
105 alert ("Fill in a valid value for Feed In Tariff for years 13-25.");
106 return 1;
107 } 
108 if (testfld(onm)) {
109	 document.irrcalc.onm.value="";
110	 return 1;
111 }
112 if (testfld(esconm)) {
113	 document.irrcalc.esconm.value="";
114	 return 1;
115 }
116 if (testfld(sysd)) {
117	 document.irrcalc.sysd.value="";
118	 return 1;
119 }
120
121x = document.irrcalc.dpr.value;
122 if (x== ".") {
123 alert ("Fill in a valid value for Debt Percentage.");
124 return 1;
125 } 
126
127 if(testfld(x)) {
128   document.irrcalc.dpr.value="";
129   return 1;
130 }
131
132if((parseFloat(x)>=100.0)) {
133		alert ("Debt Percentage can not be higher than 100%.");
134		return 1;
135}
136if(parseFloat(document.irrcalc.dpr.value)) {
137x = document.irrcalc.dur.value;
138 if (x == "" || x== ".") {
139 alert ("Fill in a valid value for Debt Term.");
140 return 1;
141 } 
142
143 if(testfld(x)) {
144   document.irrcalc.dur.value="";
145   return 1;
146 }
147if(parseFloat(x)==0.0 || parseFloat(x)>20.0) 
148{
149		 alert("Debt Term must be a whole number between 1-20.");
150		 return 1;
151}
152
153var i = 0;
154var j=0;
155var k;
156i=x.search("\\.");
157if(i!=-1) {
158	for(j=i+1;j<x.length;j++) {
159	 k = x.charAt(j);
160	 if(k!='0') {
161		 alert("Debt Term must be a whole number between 1-20.");
162   		 document.irrcalc.dur.value="";
163		 return 1;
164	 }
165	}
166
167}
168x = document.irrcalc.intr.value;
169 if (x == "" || x== ".") {
170 alert ("Fill in a valid value for Interest Rate.");
171 return 1;
172 } 
173
174 if(testfld(x)) {
175   document.irrcalc.intr.value="";
176   return 1;
177 }
178if(parseFloat(x)>20.0) 
179{
180		 alert("Interest rate must be between 0-20.");
181		 return 1;
182}
183}
184 
185
186return 0;
187
188}
189
190function ppra(fit, ppaterm, feg, capx, dpr, dur, rate, onm, esconm, sysd, fitp, fit2)
191{
192if (window.XMLHttpRequest)
193  {// code for IE7+, Firefox, Chrome, Opera, Safari
194  xmlhttp=new XMLHttpRequest();
195  }
196else
197  {// code for IE6, IE5
198  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
199  }
200//xmlhttp.onreadystatechange=function()
201var d= new Date();
202var resp="fit="+fit+"&feg= "+feg+"&capx= "+capx;
203resp=resp+"&dpr="+dpr*100+"%"+"&dur="+dur+"&rate="+rate*100+"%";
204resp=resp+"&onm="+onm+"&esconm="+esconm*100+"%"+"&sysd="+sysd*100+"%";
205resp=resp+"&fitp="+fitp+"&fit2="+fit2;
206resp=resp+"&ron="+d.toString();
207resp=resp+"&term="+ document.irrcalc.ppaterm.value;
208resp = "irrcalcproc.php?"+resp;
209xmlhttp.open("GET",resp,true);
210xmlhttp.send();
211}
212
213function llirr(capx,len,RevVals)
214{
215var rate = 0.1;
216var incr = 0.05;
217var npv = 0.0;
218var dir = 0;
219var magrate = 0.0;
220
221for (i=1; i<100; i++) {
222 // document.write("Iteration "+incr+" IRR est: "+rate+ "<br>");
223 	npv=snpv(RevVals, len,rate);
224 	if(npv == capx) break;
225 	if (npv > capx) {
226        	if (!dir) dir=1; 
227        	if (dir == 2) {dir=1; incr*=0.5;}
228		rate += incr;
229 	} else {
230       	if(!dir) dir = 2;
231       	if( dir == 1) {incr *=0.5; dir=2; }
232       	rate -= incr;
233   	}
234 }
235	magrate = Math.round(rate*1000.0*1000.0);
236	rate = magrate/10000;
237 return rate;
238 }
239
240function compirr()
241{
242 if (findErrors())
243	return;
244
245var fit  = 1.00;
246var feg  = 1.00;
247var capx = 1.00;
248var dur = 0;
249var dpr = 0.0;
250var rate = 0.0;
251var onm = 0.0;
252var esconm = 0.0;
253var sysd = 0.0;
254var fit2 = 0.0;
255var ppaterm = 25;
256
257
258fit = document.irrcalc.fit.value;
259feg = document.irrcalc.anngen.value;
260capx = document.irrcalc.capex.value;
261dur = document.irrcalc.dur.value;
262dpr = document.irrcalc.dpr.value/100.0;
263rate = document.irrcalc.intr.value/100.0;
264onm = document.irrcalc.onm.value;
265esconm = document.irrcalc.esconm.value/100.0;
266sysd = document.irrcalc.sysd.value/100.0;
267fitp = document.irrcalc.fitplan.value;
268fit2 = document.irrcalc.fit2.value;
269ppaterm = document.irrcalc.ppaterm.value;
270
271
272ppra(fit,ppaterm,feg,capx,dpr,dur,rate,onm,esconm,sysd,fitp,fit2);
273
274var annpmt=rate*capx*dpr*(1+1/((Math.pow((1+rate),dur)-1)));
275// document.write("Annual Debt Payment: "+annpmt+"<br>");
276var GenVals = new Array();
277var RevVals = new Array();
278var cfVals = new Array();
279
280var annmult=1.0-sysd;
281var onmannmult=1.0+esconm;
282var cgen = 1.0;
283var bcf = "";
284var curfit=fit;
285cgen = feg;
286
287var dscr = 0.0;
288var mindscryr = 1;
289var curdscr = 0.0;
290
291for (i=1; i<=ppaterm; i++) {
292// document.write("Year "+i+" Generation: "+cgen+ "<br>");
293
294 GenVals[i] = cgen;
295 if((i==13)&&(fitp==1))
296	curfit=fit2; 
297 RevVals[i]= (cgen*curfit-onm*Math.pow(onmannmult,i-1));
298 if(annpmt)
299 curdscr=RevVals[i]/annpmt;
300 if(i<=dur) {
301	 if (i == 1) {
302		 dscr=curdscr;
303	 } else if (curdscr<dscr) {
304		 dscr=curdscr;
305		 mindscryr=i;
306	 }
307 	cfVals[i]=RevVals[i]-annpmt;
308	if(cfVals[i]<0.0) {
309		if(bcf == "")
310			bcf=i;
311		else
312			bcf+=", "+i;
313	}
314 } else
315 	cfVals[i]=RevVals[i];
316
317 // document.write("Year "+i+" Revenue: "+RevVals[i]+ "<br>");
318 cgen = cgen * annmult;
319}
320
321/**********
322for (i=1; i<=ppaterm; i++) {
323document.write("Year "+i+" Prod: "+GenVals[i]+" Rev: "+RevVals[i]+"<br>");
324}
325***********/
326rate = llirr(capx, ppaterm,RevVals);
327document.irrcalc.pirr.value = rate; 
328rate = llirr(capx*(1-dpr),ppaterm, cfVals);
329document.irrcalc.eirr.value = rate; 
330if(dscr) {
331dscr = Math.round(dscr*10000)/10000;
332document.irrcalc.dscrval.value = dscr; 
333document.getElementById("dscrtxt").innerHTML="<font color=\"#67A810\" size=\"2\"><strong> in year "+mindscryr+"</strong></font>";
334} else {
335document.irrcalc.dscrval.value = "No Debt!"; 
336document.getElementById("dscrtxt").innerHTML="";
337}
338// document.irrcalc.irr.value = Math.round(ans); 
339if(bcf != "") {
340bcf="<b><u>NOTE: NEGATIVE CASH FLOW DETECTED IN YEARS "+bcf;
341bcf+="</b></u><br></br>"
342}
343document.getElementById("dins").innerHTML="<font color=\"#67A810\" size=\"2\">"
344	+bcf+
345	"<Strong>Last ran on "+Date()+"</Strong></font>";
346}
347
348function paramEnable()
349{
350document.irrcalc.onm.disabled=false;
351document.irrcalc.esconm.disabled=false;
352document.irrcalc.sysd.disabled=false;
353document.irrcalc.enbut.disabled=true;
354}
355
356function stppaterm(op)
357{
358if(op == 1)
359	document.irrcalc.ppaterm.value=20;
360else 
361	document.irrcalc.ppaterm.value=25;
362}
363
364function stfit(op)
365{
366//document.write("In stfit");
367if(op == 0) {
368	document.getElementById("fit21").style.display="none";
369	document.getElementById("fit22").style.display="none";
370	document.getElementById("fit23").style.display="none";
371	document.getElementById("fit11").innerHTML="Feed In Tariff:";
372	document.irrcalc.fit.value=8.5;
373}
374if(op == 1) {
375	document.getElementById("fit21").style.display="block";
376	document.getElementById("fit22").style.display="block";
377	document.getElementById("fit23").style.display="block";
378	document.getElementById("fit11").innerHTML="Feed In Tariff (Years 1-12):";
379	document.irrcalc.fit.value=12.50;
380}
381}
382
383
384function currenselec(op)
385{
386	document.irrcalc.curren.value=op;
387	if (op == 0) {
388		document.getElementById("C1").innerHTML=" Rupees";
389		document.getElementById("C2").innerHTML=" "
390		document.getElementById("C3").innerHTML=" Rupees <i> per KWhr</i>";
391		document.getElementById("fit23").innerHTML=" Rupees <i> per KWhr</i>";
392		document.getElementById("C4").innerHTML=" Rupees";
393		document.irrcalc.capex.value=45;
394		document.irrcalc.onm.value = 0.9;
395		document.irrcalc.esconm.value = 7.0;
396		document.irrcalc.fit.value=4.5;
397		document.irrcalc.fit2.value=3.0;
398		document.irrcalc.intr.value=13.0;
399	} else if (op ==1) {
400		document.getElementById("C1").innerHTML=" Dollars (after incentives)";
401		document.getElementById("C2").innerHTML=" ";
402		document.getElementById("C3").innerHTML=" Dollars <i> per KWhr</i>";
403		document.getElementById("fit23").innerHTML=" Dollars <i> per KWhr</i>";
404		document.getElementById("C4").innerHTML=" Dollars";
405		document.irrcalc.onm.value = 0.04
406		document.irrcalc.esconm.value = 3.0;
407		document.irrcalc.fit.value=0.19;
408		document.irrcalc.fit2.value=0.20;
409		document.irrcalc.capex.value=2.25;
410		document.irrcalc.intr.value=5.0;
411	}
412}
413

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.