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.