//Start global Object
var GCalcRetirementPlanning     = new CalculateRetirementPlanning();
//End global Object

function CalculateRetirementPlanning(){
 try{
		var i=0;
		//[Common Variable Starts]	
		// Common Variable For Monthly expenses on retirement 
		 var retirement_Present_Yearly_expenses=0;
		 var yearly_income_for_interest_rate=0;
		 var Number_of_years_to_retirement=0;
		 var Present_Yearly_expenses=0;
		 var Compounding_of_Rs_one=0;
		 var present_inflation_rate=0;
		 var yearly_Expenses_on_retirement=0;
		 var Monthly_expenses_on_retirement_Rs=0;

		 //Common Variable For Retirement amount needed 
		 
		 var Yearly_Income_at_above_interest_rate=0;
		 var Inflation_rate=0;
		 var retirement_to_death = new Array(100);
		 var first_year_of_retirement=new Array(100);
		 var Yearly_Exp=new Array(100);
		 var Closing_balance=new Array(100);
		 var Balance_After_Experiance=new Array(100);
		 var Interest=new Array(100);
		 var Opening_Balance=new Array(100);

	    //Common Variable For Additional monthly savings required 
		 var Rate=0;
		 var yrs_To_Retirement=0;
		 var yrs_To_Retirement_Minus_Years=0;
		 var total_Aaccmu_of_Amt_Invested=0;
		 var savings_Required_Per_Anum=0;
		 var savings_Required_Per_Month=0;
		 var additional_Savings_Required=0;
		 var retirement_amount=0;
		 var Year=new Array(100);	
		 var Principal=new Array(100);			
		 var Accmu_of_Amt_invested=new Array(100);
		 var check_for_sum=new Array(100);
			
		// RetirementFinancial
		  var Age=new Array(100);
		  var opening_Corpus=new Array(100);
		  var yearly_Expense=new Array(100);
		  var income=new Array(100);
		  var closing_Corpus=new Array(100);
		  var agelength=0;
		  var ageRetirement=0;		
		  var incomeval=0;
		//[Common Variable Ends]
		

		//[Main Variable Starts]
		this.v_Present_age=0;
		this.v_Retirement_age=0;
		this.v_Life_expectancy=0;
		this.v_Present_monthly_expenses=0;
		this.v_Inflation_rate=0;
		this.v_Monthly_savings=0;
		this.v_Annual_increase =0;
		this.v_Income_on_pre_retirement=0;
		this.v_Income_on_post_retirement=0;
		this.v_corpus_built_for_retirement=0;
	//[Main Variable Ends]

		this.populateAll = function (p_type){
			if(p_type == 'main'){
				if(populateRetirementPlanning(p_type)){//returns TRUE if validation succeeds 
					return false;
				}else{
					return true;
				}
			}
		}	

		this.resetAll = function (p_type,resetType){//resetType:both(fields and object) & resetType:fields(fields only) & & resetType:object(object only)
				if(p_type == 'main'){
					if(resetType == 'both'){
						populateRetirementPlanning(p_type,resetType);																	
					}
				}
			}
	/************** Start Business logic calculations for Retirement Planning  Report*****************/

			/* Start TO CALCULATEYEARLY EXPENSES ON RETIREMENT*/
			this.calculateRetirementExpenses = function (){
				Number_of_years_to_retirement=(this.v_Life_expectancy-this.v_Retirement_age);
				Yearly_Income_at_above_interest_rate=((this.v_corpus_built_for_retirement/100)*100)+100;
				Inflation_rate=this.v_Inflation_rate/100;
				for( i=1;i<101;i++){
					retirement_to_death[i]=i;
				}
				for(i=1;i<101;i++){
					if(retirement_to_death[i]==Number_of_years_to_retirement){
							first_year_of_retirement[i]=yearly_Expenses_on_retirement;
					}
					else{
						first_year_of_retirement[i]=0;
					}
				}
				for(i=100;i>0;i--){
					if(first_year_of_retirement[i]>0){
						Yearly_Exp[i]=first_year_of_retirement[i];// Calculating Yearly Exp For first_year_of_retirement Position
					}
					else{
							Yearly_Exp[i]=(Yearly_Exp[i+1]*Inflation_rate)+Yearly_Exp[i+1];
					}
				}
				for(i=1;i<101;i++){
					if(i==1){
						Closing_balance[i]=0;
						Balance_After_Experiance[i]=0;
						Interest[i]=0;
						Opening_Balance[i]=Balance_After_Experiance[i]+Yearly_Exp[i];
					}
					else{
						 Closing_balance[i]=Opening_Balance[i-1];
						 Balance_After_Experiance[i]=(Closing_balance[i]*100)/Yearly_Income_at_above_interest_rate;
						 Interest[i]=Closing_balance[i]-Balance_After_Experiance[i];
						 Opening_Balance[i]=Balance_After_Experiance[i]+Yearly_Exp[i];	
					}
   				}
				for(i=1;i<101;i++){
						if(i==Number_of_years_to_retirement){
							$('retirement_amount').value=Math.round(Opening_Balance[i]);
						}
				}		
			}
			/* END TO CALCULATEYEARLY EXPENSES ON RETIREMENT*/

			
			
			/* START TO CALCULATE:YEARLY EXPENSES ON RETIREMENT*/
			
			this.calculateMonthlyexpensesonretirement = function(){
			retirement_Present_Yearly_expenses=(GCalcRetirementPlanning.v_Retirement_age-GCalcRetirementPlanning.v_Present_age)+1;
			yearly_income_for_interest_rate=((this.v_Income_on_post_retirement/100)*100)+100;
			Present_Yearly_expenses=(this.v_Present_monthly_expenses*12);
			present_inflation_rate=((this.v_Inflation_rate/100)+1);
			Compounding_of_Rs_one=Math.pow(present_inflation_rate,retirement_Present_Yearly_expenses);
			yearly_Expenses_on_retirement=(Compounding_of_Rs_one*Present_Yearly_expenses);
			Monthly_expenses_on_retirement_Rs=Math.round(yearly_Expenses_on_retirement/12);
			$('montly_expenses').value=Monthly_expenses_on_retirement_Rs;
			}	
			/* END TO CALCULATE:YEARLY EXPENSES ON RETIREMENT*/


			/*START SAVINGS REQUIRED PER ANNUM TO ACCUMULATE CORPUS*/
						
			this.calculateAdditionalmonthlysavingsrequired  = function(){
				Rate=(this.v_Income_on_post_retirement/100)+1;
				yrs_To_Retirement=retirement_Present_Yearly_expenses;
				for(i=1;i<101;i++){//Year
					Year[i]=i;
					if(i==1){
						Principal[i]=100;
						yrs_To_Retirement_Minus_Years=yrs_To_Retirement-Year[i];
						Accmu_of_Amt_invested[i]=Principal[i]*Math.pow(Rate,yrs_To_Retirement_Minus_Years);
						
					}else{
							var Annual_increase=1+(this.v_Annual_increase/100);
						    Principal[i]=Principal[1]*Math.pow(Annual_increase,Year[i-1]);
							yrs_To_Retirement_Minus_Years=yrs_To_Retirement-Year[i];			
							Accmu_of_Amt_invested[i]=Principal[i]*Math.pow(Rate,yrs_To_Retirement_Minus_Years);
					 }
				}
				for(i=1;i<101;i++){
					if(Year[i]<=yrs_To_Retirement){
						check_for_sum[i]=1;
					}
					else{
						check_for_sum[i]=0;
					}
				}
				for(i=1;i<101;i++){
					if(check_for_sum[i]==1){
						total_Aaccmu_of_Amt_Invested=total_Aaccmu_of_Amt_Invested+Accmu_of_Amt_invested[i];
					}
				}
				retirement_amount=$('retirement_amount').value;
				savings_Required_Per_Anum=(retirement_amount/total_Aaccmu_of_Amt_Invested)*100;
				savings_Required_Per_Month=savings_Required_Per_Anum/12;
				additional_Savings_Required=savings_Required_Per_Month-this.v_Monthly_savings;
				$('additional_monthly_saving').value=Math.round(additional_Savings_Required);
				total_Aaccmu_of_Amt_Invested=0;

				if($('additional_monthly_saving').value<0){
					$('retirement_plann').innerHTML='The current monthly savings done by you is sufficient to make your retired life financially independent for the rate of inflation and rate of return on your investments specified by you.<A HREF="#" onClick="monthlySaving();">Click here</A> (to see the cash flow)<br><br>Investing in equites would be an ideal avenue to get healthy returns. To start investing <A HREF="#" onClick="opennew();">click here.</A>';
				}
				else{
					$('retirement_plann').innerHTML='The current monthly savings done by you is insufficient to make your retired life financially independent for the rate of inflation and rate of return on your investments specified by you. Addition monthly savings of Rs. ('+Math.round(additional_Savings_Required)+') is required to have financially independent retired life. To see how the retirement corpus will be utilised <A HREF="#" onClick="monthlySaving();">Click here</A> (to see the cash flow)<br><br>Investing in equites would be an ideal avenue to get healthy returns. To start investing <A HREF="#" onClick="opennew();">click here.</A>';
				}
			 }
			/*END SAVINGS REQUIRED PER ANNUM TO ACCUMULATE CORPUS*/
			
			/*Start RetirementFinancial*/
			this.calculateRetirementFinancial= function(){
				agelength= this.v_Life_expectancy-this.v_Retirement_age;
				ageRetirement=this.v_Retirement_age;
				age_Retirement=parseInt(this.v_Retirement_age)+1;
				incomeval=this.v_corpus_built_for_retirement/100;
				for(i=1;i<=agelength;i++){
					Age[i]=age_Retirement++;
				}
				for(i=1;i<=agelength;i++){// Calculating retirement financial planner
					if(i==1){ 
					opening_Corpus[i]=Math.round($('retirement_amount').value);
					yearly_Expense[i]=Math.round($('montly_expenses').value*12);
	                income[i]=Math.round((opening_Corpus[i]-yearly_Expense[i])*incomeval);			
					closing_Corpus[i]=Math.round(parseInt( opening_Corpus[i] ) - parseInt( yearly_Expense[i] )+ parseInt( income[i] ) );
					//alert( opening_Corpus[i] +"  "+ yearly_Expense[i] +" "+ income[i] + "\n closing_Corpus 4,424,735 ="+closing_Corpus[i] );
					}
					else{
						Math.round(opening_Corpus[i]=closing_Corpus[i-1] );// For opening_Corpus
						// Start  Calculating yearly_Expense
						if(Age[i]>0){
									yearly_Expense[i]=Math.round(yearly_Expense[i-1]+(yearly_Expense[i-1]*(this.v_Inflation_rate/100)) );
						}
						else{
									yearly_Expense[i]=0;
						}
						//End  Calculating yearly_Expense

						income[i]=Math.round((opening_Corpus[i]-yearly_Expense[i])*(this.v_corpus_built_for_retirement/100) ); //Calculationg Income
						closing_Corpus[i]=Math.round( parseInt( opening_Corpus[i] ) - parseInt( yearly_Expense[i] )+ parseInt( income[i] ) );// Calculating closing_Corpus[i]

					}
					
				}
				// Start to generate table
					var tbody = document.getElementById('financial_planner').getElementsByTagName("TBODY")[0];
					for(i=1;i<=agelength;i++){
					var row=document.createElement("TR");
					var td1=document.createElement("TD");// create TD Tage
					td1.setAttribute("align","center"); // Give Right Align For TD tag
					td1.innerHTML=Age[i];//Add value In TD Tag
					var td2=document.createElement("TD");// create TD Tage
					td2.setAttribute("align","center");// Give Right Align For TD tag
					td2.innerHTML=opening_Corpus[i]+".00";//Add value In TD Tag
					var td3=document.createElement("TD");// create TD Tage
					td3.setAttribute("align","center");// Give Right Align For TD tag
					td3.innerHTML=yearly_Expense[i]+".00";//Add value In TD Tag
					var td4=document.createElement("TD");// create TD Tage
					td4.setAttribute("align","center");// Give Right Align For TD tag
					td4.innerHTML=income[i]+".00";// Add value In TD Tag
					var td5=document.createElement("TD");// create TD Tage
					td5.setAttribute("align","center");// Give Right Align For TD tag
					td5.innerHTML=closing_Corpus[i]+".00";// create TD Tage
					row.appendChild(td1);
					row.appendChild(td2);
					row.appendChild(td3);
					row.appendChild(td4);
					row.appendChild(td5);
					tbody.appendChild(row);
					}	
						

			}
			/*End RetirementFinancial*/
	
	/************** End Business logic calculations for Retirement Planning  Report*****************/
	

 }
 catch(err){
		alert("err in CalculatorRetirementPlanningReport.html.RetirementPlanning.js.calculateRetirementPlanning() "+err.description)
 }
}
function monthlySaving(){
	transCalculateRetirementPlanning("main","financialplaner");
	$('last').focus();
}
function opennew()
{
	window.open("http://www.kotaksecurities.com/accountsection/index.html");
}
function transCalculateRetirementPlanning(p_type ,p_action){
try{	
		if(p_type == 'main') {
			if(p_action == 'trans') {
					if(populateRetirementPlanning(p_type)){//returns TRUE if validation succeeds 
					return false;
					}else{
						var hideUnhideDivNames='retirement_planning_report_div';// unhide Retirement Planining Report Div
						var hideUnhideDivNames1='monthly_expenses_on_retiremen_div';// Hide Monthly Ecpenses On retirwment Div 
						hideUnhideFields(hideUnhideDivNames,'');
						hideUnhideFields('','retirement_planning_report_div');
						GCalcRetirementPlanning.calculateMonthlyexpensesonretirement();
						GCalcRetirementPlanning.calculateRetirementExpenses();
						GCalcRetirementPlanning.calculateAdditionalmonthlysavingsrequired();
						/*  Start For Hide Monthly Ecpenses On retirwment Div  */
						hideUnhideFields(hideUnhideDivNames1,'');
						/*  End For Hide Monthly Ecpenses On retirwment Div  */
						$('flast').focus();
					}
			 }			
			 else if(p_action == 'reset'){
					window.location="Retirementplanningcalculation.html"
			}
			else if(p_action == 'financialplaner'){
						
						var hideUnhideDivNames='monthly_expenses_on_retiremen_div';
						hideUnhideFields(hideUnhideDivNames,'');
						hideUnhideFields('','monthly_expenses_on_retiremen_div');
						var tbody = $('financial_planner').getElementsByTagName("TBODY")[0];
						var rowArrObj=tbody.childNodes; 
						var temp_noOfRows=  rowArrObj.length;
						for (var i=0;i<temp_noOfRows ;i++ ){
							tbody.removeChild(rowArrObj[0])
						}
						GCalcRetirementPlanning.calculateRetirementFinancial();
						document.getElementById('financial_planner').focus();
						
			}

		} 
	}catch(err){
alert("err in CalculatorRetirementPlanningReport.html.RetirementPlanning.js.calculateRetirementPlanning() "+err.description)
	 }
		
}

function populateRetirementPlanning(p_type,resetType){
	try{  alert("reset");
			if(p_type == 'main'){
				if(resetType == 'both'){
					alert("reset");
					var hideUnhideDivNames='retirement_planning_report_div';
					//var innerHTMLEmpty='eq_less_then_yr_data~eq_less_then_yr_value~eq_more_then_yr_value~debt_less_then_yr_value~debt_more_then_yr_value';

						GCalcRetirementPlanning.v_Present_age=0;
						GCalcRetirementPlanning.v_Retirement_age=0;
						GCalcRetirementPlanning.v_Life_expectancy=0;
						GCalcRetirementPlanning.v_Present_monthly_expenses=0;
						GCalcRetirementPlanning.v_Inflation_rate=0;
						GCalcRetirementPlanning.v_Monthly_savings=0;		
						GCalcRetirementPlanning.v_Annual_increase=0;
						GCalcRetirementPlanning.v_Income_on_pre_retirement=0;
						GCalcRetirementPlanning.v_Income_on_post_retirement=0;
						GCalcRetirementPlanning.v_corpus_built_for_retirement=0;

						var emptStr='main_current_age~'+
									'main_retirement_age~'+
									'main_expected_life~'+
									'main_present_monthly_expenses~'+
									'main_present_inflation_rate~'+
									'main_retirement_corpus_each_month~'+		
									'main_annual_increase_for_retirement_corpus~'+
									'main_amount_saving_for_retirement_corpus~'+
									'main_until_rate_invesment_on_retirement_corpus~'+
									'main_rate_earn_on_retirement_saving';
						setClearField(emptStr);
						hideUnhideFields('',hideUnhideDivNames)
				}
			}
	}catch(err){
		alert("err in CalculatorRetirementPlanningReport.html.RetirementPlanning.js.resetAll() "+err.description)
	}

}
/*************************All variable Population for calculating Retirement Planning Details done here**************************/
function populateRetirementPlanning(p_type){
	try{
			if(p_type == 'main'){
				if(validateRetirementPlanning(p_type)){
				   return true;				  
				}else {			
						GCalcRetirementPlanning.v_Present_age=$$('main_current_age');
						GCalcRetirementPlanning.v_Retirement_age=$$('main_retirement_age');
						GCalcRetirementPlanning.v_Life_expectancy=$$('main_expected_life');
						GCalcRetirementPlanning.v_Present_monthly_expenses=$$('main_present_monthly_expenses');
						GCalcRetirementPlanning.v_Inflation_rate=$$('main_present_inflation_rate');
						GCalcRetirementPlanning.v_Monthly_savings=$$('main_retirement_corpus_each_month');		
						GCalcRetirementPlanning.v_Annual_increase=$$('main_annual_increase_for_retirement_corpus');
						GCalcRetirementPlanning.v_Income_on_pre_retirement=$$('main_amount_saving_for_retirement_corpus');
						GCalcRetirementPlanning.v_Income_on_post_retirement=$$('main_until_rate_invesment_on_retirement_corpus');
						GCalcRetirementPlanning.v_corpus_built_for_retirement=$$('main_rate_earn_on_retirement_saving');

				}					
			}
	}catch(err){
		alert("err in CalculatorRetirementPlanningReport.html.RetirementPlanning.js.populateRiskAnalyser() "+err.description)
	}
}
/*************************All validations for calculating Retirement Planning Details done here**************************/
function validateRetirementPlanning(p_type){
	try{
		if(p_type == 'main'){
			var checkMainEmptStr=	'main_current_age# current age field is empty~'+
												'main_retirement_age#plan to retire field is Empty~'+
												'main_expected_life#expected life expectancy field is Empty~'+
												'main_present_monthly_expenses# amount of present monthly expenses field is Empty~'+
												'main_present_inflation_rate#expected inflation rate by which your monthly expenses will increase each year field is Empty~'+
												'main_retirement_corpus_each_month#retirement corpus each month field is Empty~'+		
												'main_annual_increase_for_retirement_corpus#annual increase in your savings that you set aside for your retirement corpus field is Empty~'+
												'main_amount_saving_for_retirement_corpus#What is the amount of saving already kept in your retirement corpus field is Empty~'+
												'main_until_rate_invesment_on_retirement_corpus#How much is the rate of return on invesment you expect to earn on your retirement corpus from now until retirement field is Empty~'+
												'main_rate_earn_on_retirement_saving#retirement savings post retiremen is Empty';
												

			var mainNumStr= 	'main_current_age~'+
												'main_retirement_age~'+
												'main_expected_life~'+
												'main_present_monthly_expenses~'+
												'main_present_inflation_rate~'+
												'main_retirement_corpus_each_month~'+		
												'main_annual_increase_for_retirement_corpus~'+
												'main_amount_saving_for_retirement_corpus~'+
												'main_until_rate_invesment_on_retirement_corpus~'+
												'main_rate_earn_on_retirement_saving';

			var checkMainNumStr =checkNumericAll(mainNumStr);                 
			
		    if(checkEmptyAll(checkMainEmptStr)){
			   return true;
			}else if(checkMainNumStr != ""){
				$(checkMainNumStr).select();
				$(checkMainNumStr).focus();
				alert('Please Enter Numeric Value !')
			   return true;
			}
			else{						
				return false;				
			}
		}
	}catch(err){
		alert("err in CalculatorRetirementPlanningReport.html.RetirementPlanning.js.validateRiskAnalyser() "+err.description)
	}
}
	/**************End Validation*****************/




   
