window.onload = function() {
	top.document.irr_form.equity.value="10000000";
	top.document.irr_form.cfo.value="3000000";
	top.document.irr_form.annual_rate.value="2.0";
	top.document.irr_form.cfs.value="1000000";
	top.document.irr_form.period.value="10";
	top.document.irr_form.rate.value="5.0";
	IRRCalc();
}

function check() { 
	var equity = top.document.irr_form.equity.value;
	var cfo = top.document.irr_form.cfo.value;
	var annual_rate = top.document.irr_form.annual_rate.value;
	var cfs = top.document.irr_form.cfs.value;
	var period = top.document.irr_form.period.value;
	var rate = top.document.irr_form.rate.value;
	
	if(equity=="" || isNaN(parseInt(equity)) || equity<=0) { 
		alert("自己資金を正しく入力して下さい。");
		top.document.irr_form.equity.value="";
		top.document.irr_form.equity.focus();
		return false; 
	} else if(cfo=="" || isNaN(parseInt(cfo)) || cfo<=0) {
		alert("運営キャッシュフローを正しく入力して下さい。");
		top.document.irr_form.cfo.value="";
		top.document.irr_form.cfo.focus();
		return false; 
	} else if(annual_rate=="" || isNaN(parseFloat(annual_rate)) || annual_rate>100 || annual_rate<-100 ) {
		alert("運営キャッシュフローの年次上昇率を正しく入力して下さい。");
		top.document.irr_form.cfo.value="";
		top.document.irr_form.cfo.focus();
		return false; 
	} else if(cfs=="" || isNaN(parseInt(cfs))) {
		alert("売却キャッシュフローを正しく入力して下さい。");
		top.document.irr_form.cfs.value="";
		top.document.irr_form.cfs.focus();
		return false; 
	} else if(period=="" || isNaN(parseInt(period)) || period<=0 || period>20) {
		alert("保有期間を正しく入力して下さい。");
		top.document.irr_form.period.value="";
		top.document.irr_form.period.focus();
		return false; 
	} else if(rate=="" || isNaN(parseFloat(rate)) || rate<0) {
		alert("割引率を正しく入力して下さい。");
		top.document.irr_form.rate.value="";
		top.document.irr_form.rate.focus();
		return false; 
	} else {
		IRRCalc();
	}
}


function IRRCalc(){
	var guest = 0;
	var grate = 0;
	var inc = 0.0001;
	var incs = 0.001;
	var incm = 0.01;
	var incl = 0.1;
	var sum = 0;
	var sum_year =0;
	var CArray = new Array();
	var PArray = new Array();
	var equity = parseInt(top.document.irr_form.equity.value);
	var cfo = parseInt(top.document.irr_form.cfo.value);
	var annual_rate = parseFloat(top.document.irr_form.annual_rate.value);
	var cfs = parseInt(top.document.irr_form.cfs.value);
	var period = parseInt(top.document.irr_form.period.value);
	var rate = parseFloat(top.document.irr_form.rate.value);
	var output = "";
	var output_npv ="";
	var output_irr ="";
	var strXML="";
	var pstrXML="";
	var astrXML="";
	var dataXML="";
	
	annual_rate=annual_rate/100;
	rate=rate/100;
	
	CArray[0] = 0 - equity;
	PArray[0] = CArray[0];
	sum_year =CArray[0]
	
	output += "<table style='width:400px;margin:10px;border:1px solid #999;'><tbody> \
				<tr><th style='text-align:left'>年度</th> \
				<th style='text-align:right'>CF（ｷｬｯｼｭﾌﾛｰ）</th> \
				<th style='text-align:right'>CFの現在価値</th> \
				<th style='text-align:right'>CF累計</th></tr> \
				<tr><td>0年度:</td><td style='text-align:right'>"+addFigure(CArray[0])+" 円</td> \
				<td style='text-align:right'>"+addFigure(PArray[0])+" 円</td> \
				<td style='text-align:right'>"+addFigure(CArray[0])+" 円</td></tr>";
				
	strXML = "<graph caption='キャッシュフロー' xAxisName='年' showvalues='0' numDivLines='4' formatNumberScale='1' decimalPrecision='0' anchorSides='10' anchorRadius='3' anchorBorderColor='009900'>"

	strXML = strXML + "<categories>";
	
	dataXML ="<graph caption='割引率とNPVの関係' subcaption='' xAxisName='割引率(％)' decimalPrecision='0' showNames='1' showValues='0' rotateNames='0' showColumnShadow='1' animation='1' showAlternateHGridColor='1' AlternateHGridColor='ff5904' divLineColor='ff5904' divLineAlpha='20' alternateHGridAlpha='5' anchorRadius='0'>";
	
	for(var i=0;i<=period; i++){
		strXML = strXML + "<category name='" + i + "' />";
	}
	
	strXML = strXML + "</categories>";	
	strXML = strXML +"<dataset seriesName='CF' color='AFD8F8' >";
	strXML = strXML + "<set value='" + fixVal(CArray[0],0,0,' ') + "' />";
	
	pstrXML = pstrXML +"<dataset seriesName='CFの現在価値' color='F6BD0F' >";
	pstrXML = pstrXML + "<set value='" + fixVal(CArray[0],0,0,' ') + "' />";
	
	astrXML = astrXML +"<dataset seriesName='CF累計' color='8BBA00' showValues='0' parentYAxis='S' >";
	astrXML = astrXML + "<set value='" + fixVal(CArray[0],0,0,' ') + "' />";
	
	for(var i=1;i<period; i++){
		CArray[i] = cfo*Math.pow((1+annual_rate),i-1);
		PArray[i] = CArray[i]/Math.pow((1+rate),i);
		sum_year +=CArray[i];
		output += "<tr><td>"+ i + "年度:</td> \
			<td style='text-align:right'>"+addFigure(fixVal(CArray[i],0,0,' '))+" 円</td> \
			<td style='text-align:right'>"+addFigure(fixVal(PArray[i],0,0,' '))+" 円</td> \
			<td style='text-align:right'>"+addFigure(fixVal(sum_year,0,0,' '))+" 円</td></tr>";
		strXML = strXML + "<set value='" + fixVal(CArray[i],0,0,' ') + "' />";
		pstrXML = pstrXML + "<set value='" + fixVal(PArray[i],0,0,' ') + "' />";
		astrXML = astrXML + "<set value='" + fixVal(sum_year,0,0,' ') + "' />";
	}
	
	CArray[period] = cfo*Math.pow((1+annual_rate),period)+cfs;
	PArray[period] = CArray[period]/Math.pow((1+rate),period);
	sum_year += CArray[period];
	output += "<tr><td>"+ period + "年度:</td> \
		<td style='text-align:right'>"+addFigure(fixVal(CArray[period],0,0,' '))+" 円</td> \
		<td style='text-align:right'>"+addFigure(fixVal(PArray[period],0,0,' '))+" 円</td> \
		<td style='text-align:right'>"+addFigure(fixVal(sum_year,0,0,' '))+" 円</td></tr></tbody></table>";
	strXML = strXML + "<set value='" + fixVal(CArray[period],0,0,' ') + "' /></dataset>";
	pstrXML = pstrXML + "<set value='" + fixVal(PArray[period],0,0,' ') + "' /></dataset>";
	astrXML = astrXML + "<set value='" + fixVal(sum_year,0,0,' ') + "' /></dataset>";
	strXML = strXML + pstrXML + astrXML +"</graph>";

	i=0;
	while(i<= 100){
		grate = 0.01*i;
		NPV = 0;
		for (var j=0; j<CArray.length; j++){
			NPV += CArray[j]/Math.pow((1+grate),j);
		}
		if (i%10 == 0) {
			dataXML = dataXML + "<set name='" + i + "' value='" + fixVal(NPV,0,0,' ') + "' showName='1'/>";
		} else {
			dataXML = dataXML + "<set name='" + i + "' value='" + fixVal(NPV,0,0,' ') + "' showName='0'/>";
		}
		i = i + 2;
	};
	
	dataXML = dataXML + "</graph>";
	
	NPV = 0;
	NPVL =0;
	
	for(var i=0;i<CArray.length; i++){
		sum = sum + CArray[i];
		NPV += CArray[i]/Math.pow((1+rate),i);
		NPVL += CArray[i]/Math.pow(2,i);	
	}
	
	output_npv =NPV;
	
	output_irr += "<table style='width:260px;margin:10px;border:1px solid #999;'><tbody> \
				<tr><th colspan='2' style='text-align:center'>IRR＆NPV計算結果</th></tr>";	
	
	if (sum < 0){
		output_irr += "<tr><td>IRR:</td><td style='text-align:center'>計算できません</td></tr>";
	} else if(NPVL>=0){
		output_irr += "<tr><td>IRR:</td><td style='text-align:center'>100%以上</td></tr>";
	} else	{

		do
		{
			guest += incl;
			NPV = 0;
			for (var j=0; j<CArray.length; j++)
			{
				NPV += CArray[j]/Math.pow((1+guest),j);
			}
		}while(NPV > 0);
		
		guest=guest-incl;
		
		do
		{
			guest += incm;
			NPV = 0;
			for (var j=0; j<CArray.length; j++)
			{
				NPV += CArray[j]/Math.pow((1+guest),j);
			}
		}while(NPV > 0);
		
		guest=guest-incm;
		
		do
		{
			guest += incs;
			NPV = 0;
			for (var j=0; j<CArray.length; j++)
			{
				NPV += CArray[j]/Math.pow((1+guest),j);
			}
		}while(NPV > 0);
		
		guest=guest-incs;		
		
		do
		{
			guest += inc;
			NPV = 0;
			for (var j=0; j<CArray.length; j++)
			{
				NPV += CArray[j]/Math.pow((1+guest),j);
			}
		}while(NPV > 0);
		
		guest=guest-inc;	
		
		guest= guest * 100;
		
		output_irr += "<tr><td>IRR:</td><td style='text-align:center'>"+fixVal(guest,0,1,' ')+" ％</td></tr>";	
	
	}
	
	output_irr += "<tr><td>NPV:</td><td style='text-align:center'>"+addFigure(fixVal(output_npv,0,0,' '))+" 円</td> \
			</tr></tbody></table>";
			
	document.getElementById("pmt").innerHTML = output;
	document.getElementById("out").innerHTML = output_irr;
	var chart1 = new FusionCharts("/sites/all/modules/fusioncharts/FusionChartsFree/Charts/FCF_MSColumn2DLineDY.swf", "chart1Id", "400", "320");		   
	chart1.setDataXML(strXML);
	chart1.render("chart1div");
	
	var chart2 = new FusionCharts("/sites/all/modules/fusioncharts/FusionChartsFree/Charts/FCF_Line.swf", "chart2Id", "320", "300");		   
	chart2.setDataXML(dataXML);
	chart2.render("chart2div");
}

function addFigure(str) {　
var num = new String(str).replace(/,/g, "");　
while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));　
return num;
}

function fixVal(value,numberOfCharacters,numberOfDecimals,padCharacter) { 
	var i, stringObject, stringLength, numberToPad;            // define local variables

	value=value*Math.pow(10,numberOfDecimals);                 // shift decimal point numberOfDecimals places
	value=Math.round(value);                                   //  to the right and round to nearest integer

	stringObject=new String(value);                            // convert numeric value to a String object
	stringLength=stringObject.length;                          // get length of string
	while(stringLength<numberOfDecimals) {                     // pad with leading zeroes if necessary
		stringObject="0"+stringObject;                     // add a leading zero
		stringLength=stringLength+1;                       //  and increment stringLength variable
	}

	if(numberOfDecimals>0) {			           // now insert a decimal point
		stringObject=stringObject.substring(0,stringLength-numberOfDecimals)+"."+
		stringObject.substring(stringLength-numberOfDecimals,stringLength);
	}

	if (stringObject.length<numberOfCharacters && numberOfCharacters>0) {
		numberToPad=numberOfCharacters-stringObject.length;      // number of leading characters to pad
		for (i=0; i<numberToPad; i=i+1) {
			stringObject=padCharacter+stringObject;
		}
	}

	return stringObject;                                       // return the string object
}

