//global 
var intAmtExpYear;
var intAmtAtTodayPr;
var intRateOfPrInc;
var intExpRateOfRet;
var intHeadStart;
var intCurrYear;
var intCurrAge;
var intRetirementAge;
var szName;
var szEmail;
var intAmtAtTodayPr1;
var szPrInc="";
var szExpRateOfReturn="";


function btnSubmit_onclick() {//alert("hello");		
		var result;
		result = true;
		if (result == true) {
			if (btnCalc_onclick() == true) {
					//alert("partha");	
					var intAgeDiff
					var intSavingsTgt
					var intSavPerYr
					var intMonthlySavings
					var intYr1MonthlySavings
					var intcalc1a,intcalc1b,intcalc1c,intcalc1d,intcalc1e,intcalc1f,intcalc1g
					var intI,intJ;

					var dtToday;
					dtToday = new Date();
					intCurrYear = parseInt(dtToday.getFullYear());
					
					intAgeDiff = parseFloat(intAmtExpYear);	//---------
					
					//calculation for savings targets
					intcalc1a = 1 + (parseFloat(intRateOfPrInc) / 100);	//--------
					intcalc1b = Math.pow(intcalc1a,intAgeDiff);
					intSavingsTgt = Math.round((parseFloat(intAmtAtTodayPr)-parseFloat(intHeadStart)) * intcalc1b);	//-----------
					intSavingsTgt1 = Math.round(parseFloat(intAmtAtTodayPr) * intcalc1b);
					//calculation for monthly savings
					intcalc1c = 1 + (parseFloat(intExpRateOfRet) / 100);	//-----------------
					intcalc1d = 0;
					for(intI = 1; intI <= intAgeDiff; intI++) {
						intcalc1d = intcalc1d + Math.pow(intcalc1c,intI);
					}
					intSavPerYr = (intSavingsTgt / intcalc1d);
					intMonthlySavings = (intSavPerYr / 12);
					
					//calculation for monthly savings in Year1
					intcalc1e = 1 + (parseFloat(intExpRateOfRet) / 100);	//---------
					intcalc1f = 1 + (parseFloat(intRateOfPrInc) / 100);		//---------
					intI = 0;
					intcalc1g = 0;
					for(intJ=intAgeDiff; intJ>0 && intI<intAgeDiff; intJ--,intI++) {
						intcalc1g = intcalc1g + ((Math.pow(intcalc1f,intI)) * (Math.pow(intcalc1e,intJ)));
					}
					intYr1MonthlySavings = (intSavingsTgt / intcalc1g) / 12;
					document.frmExpensePlanner.hdnMonthlySavings.value = intMonthlySavings;
					document.frmExpensePlanner.hdnYr1MonthlySavings.value = intYr1MonthlySavings;
					document.frmExpensePlanner.txtTarget.value=intSavingsTgt1;
					//added-----
					document.frmExpensePlanner.txtAmtAtTodayPrice.value=intAmtAtTodayPr1;
					document.frmExpensePlanner.txtHeadStart.value=intHeadStart;
					//----------
					document.frmExpensePlanner.submit();				
			}
			//both validations work
		}
		//result = true
	}
	

	function btnCalc_onclick() {
		
		if (fnValidate1() == true) {//alert("partha");	
			
			//addition for head start
			if(fnTrimString(document.frmExpensePlanner.txtHeadStart.value)=="")	//empty head start
			{
				intHeadStart=0;
				document.frmExpensePlanner.txtHeadStart.value="0";
			}
			else
			{	
				intHeadStart=stripCommas(fnTrimString(document.frmExpensePlanner.txtHeadStart.value));				
			}
			if(fnTrimString(document.frmExpensePlanner.txtRateOfPriceInc.value)=="")	
			{
				intRateOfPrInc=0;
				document.frmExpensePlanner.txtRateOfPriceInc.value="0";
			}
			else
			{	
				intRateOfPrInc=fnTrimString(document.frmExpensePlanner.txtRateOfPriceInc.value);				
			}
			
			return true
		} 
	}

	// Function to check if string is integer.
	function fnCheckNumeric1(strSrc){
		var RE;
		RE=/^[0-9]{1,}$/;
		strSrc = fnTrimString(strSrc);
		if(strSrc != ""){
			if (RE.exec(strSrc) == null)
				return false;
			else
				return true;
		}
		return false;
	}
	function fnCheckNumeric(s)
	{
		
		if(isNaN(fnTrimString(s)))
			return false;
		else
			return true;
	}


	function fnValidate1() {
		var strTemp = "",strTemp1 = "";
		var strAgesOk = "T";	//if ages are ok, to compare them
		var aErrCode = new Array();
		var aErrField = new Array();
		
		var count = -1;
		
		intCurrYear = fnTrimString(document.frmExpensePlanner.txtCurrYear.value);
		intAmtExpYear =fnTrimString(document.frmExpensePlanner.txtAmtExpYear.value);
		//intAmtAtTodayPr = fnTrimString(document.frmExpensePlanner.txtAmtAtTodayPrice.value);
		intAmtAtTodayPr = stripCommas(fnTrimString(document.frmExpensePlanner.txtAmtAtTodayPrice.value));
		intAmtAtTodayPr1 = stripCommas(fnTrimString(document.frmExpensePlanner.txtAmtAtTodayPrice.value));
		intRateOfPrInc = fnTrimString(document.frmExpensePlanner.txtRateOfPriceInc.value);
		intExpRateOfRet = fnTrimString(document.frmExpensePlanner.txtExpRateOfReturn.value);
		//intHeadStart=fnTrimString(document.frmExpensePlanner.txtHeadStart.value);
		intHeadStart=stripCommas(fnTrimString(document.frmExpensePlanner.txtHeadStart.value));
		
		
		if (intAmtAtTodayPr == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "1";
		}
		else {
			if (fnCheckNumeric1(intAmtAtTodayPr) == false) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "1";
			}
		}
		if (intAmtExpYear == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "2";
		}
		else {
			//-------------------------
			if (parseInt(intAmtExpYear) == 0) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "-3";
			}
			//-------------------------
			if (fnCheckRate1(intAmtExpYear) == false) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "2";
			}
		}
		if (intExpRateOfRet == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "3";
		}
		else {
			if (fnCheckRate1(intExpRateOfRet) == false) {
					strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "3";
			}
		}
		
		if (intHeadStart != "")
		{
			if (fnCheckNumeric(intHeadStart) == false)
			{
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "4";
			}
			else	//check for headstart not more than amount
			{
				if (fnCheckNumeric(intAmtAtTodayPr))
				{
					if(parseInt(intHeadStart)>=parseInt(intAmtAtTodayPr))
					{
						strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "5";
					}
				}
			}
		}
		if (intRateOfPrInc != "")
		{
			if (fnCheckRate1(intRateOfPrInc) == false)
			{
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "-2";
			}			
		}
		if (!isEmpty(strTemp)) {
			count++;
		}
		
		if (count == -1) {
			//all data correct
			return true
		}
		else {
			document.frmExpensePlanner.txtError.value=strTemp;
			document.frmExpensePlanner.submit();
		}	
	
	}//function end

	function fnTrimString(strSrc){
		var RE1;
		var RE2;
		var strTrimmedString;
		RE1=/^[\s]{1,}/g;
		RE2=/[\s]{1,}$/g;
		strTrimmedString = (strSrc.replace(RE1,"")).replace(RE2,"");
		return strTrimmedString;
	}
	

	function fnValidate1ForRetirement() {
		var strTemp = "",strTemp1 = ""
		var strAgesOk = "T";	//if ages are ok, to compare them
		var aErrCode = new Array();
		var aErrField = new Array();
		
		var count = -1;
		
		intCurrAge = fnTrimString(document.frmExpensePlanner.txtCurrAge.value);
		intRetirementAge = fnTrimString(document.frmExpensePlanner.txtRetirementAge.value);
		//intAmtAtTodayPr = fnTrimString(document.frmExpensePlanner.txtAmtAtTodayPrice.value);
		intAmtAtTodayPr = stripCommas(fnTrimString(document.frmExpensePlanner.txtAmtAtTodayPrice.value));		
		intAmtAtTodayPr1 = stripCommas(fnTrimString(document.frmExpensePlanner.txtAmtAtTodayPrice.value));		
		intRateOfPrInc = fnTrimString(document.frmExpensePlanner.txtRateOfPriceInc.value);
		intExpRateOfRet = fnTrimString(document.frmExpensePlanner.txtExpRateOfReturn.value);
		//intHeadStart=fnTrimString(document.frmExpensePlanner.txtHeadStart.value);
		intHeadStart=stripCommas(fnTrimString(document.frmExpensePlanner.txtHeadStart.value));
		
		
		if (intAmtAtTodayPr == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "1";
		}
		else {
			if (fnCheckNumeric1(intAmtAtTodayPr) == false) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "1";
			}
		}
		
		if (intCurrAge == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "2";
		}
		else {
			if (fnCheckNumeric(intCurrAge) == false) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "2";
			}
		}
		if (intRetirementAge == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "3";
		}
		else {
			if (fnCheckNumeric(intRetirementAge) == false) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "3";
			}
		}
		if (intExpRateOfRet == "") {
			strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "4";
		}
		else {
			if (fnCheckRate1(intExpRateOfRet) == false) {
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "4";
			}
		}
		
		if (intHeadStart != "")
		{
			if (fnCheckNumeric(intHeadStart) == false)
			{
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "5";
			}			
		}
		if(fnCheckNumeric(intRetirementAge) && fnCheckNumeric(intCurrAge))
		{
			//check for age difference
			if((parseFloat(intRetirementAge)-parseFloat(intCurrAge))<=0.)
			{
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "6";
			}
		}
		if (intRateOfPrInc != "")
		{
			if (fnCheckRate1(intRateOfPrInc) == false)
			{
				strTemp = strTemp + (isEmpty(strTemp) ? "" : ";") + "-2";
			}			
		}
		if (!isEmpty(strTemp)) {
			count++;			
		}
		
		if (count == -1) {
			//all data correct
			return true
		}
		else {
			document.frmExpensePlanner.txtError.value=strTemp;
			document.frmExpensePlanner.submit();
		}	//alert("partha");
	
	}//function end

	function btnSubmit_onclickForRetirement() {
		var result;
		result = true;
		
		if (result == true) {
			if (btnCalc_onclickForRetirement() == true) {
					//alert("partha");	
					var intAgeDiff
					var intSavingsTgt
					var intSavPerYr
					var intMonthlySavings
					var intYr1MonthlySavings
					var intcalc1a,intcalc1b,intcalc1c,intcalc1d,intcalc1e,intcalc1f,intcalc1g
					var intI,intJ
					
					var dtToday;
					dtToday = new Date();
					intCurrYear = parseInt(dtToday.getFullYear());
					
					intAgeDiff = parseFloat(intRetirementAge)-parseFloat(intCurrAge);	//------------------
					if(intAgeDiff>100)
					{
						var strTemp = "";
						strTemp += (isEmpty(strTemp) ? "" : ";") + "8";
						document.frmExpensePlanner.txtError.value=strTemp;
						document.frmExpensePlanner.submit();
					}
									
					//new code for retirement
					//Calculating the money required from the monthly requirement entered:
					//var intARate = 9.5;
					var intARate = parseFloat(intExpRateOfRet);
					//Annualised Rate of return [R]
					//calculation for retirement target
					//Multiply x by 12 for yearly amount
					//12 * x = P*R*T/100 => P = 12 * x * 100 / R*T
					//[P = (12 * intAmtAtTodayPr * 100) / (9.5 * 1year)]
					
					//validation that head start amount is enough
					//amount required per month when retiring at that day's price
					var dAmtPerMonthAtRetirement=parseFloat(intAmtAtTodayPr)*Math.pow((1.+(parseFloat(intRateOfPrInc)/100.)),intAgeDiff);	//--------
					//amount that head start amount will be at that time
					var dAmtHeadStartWillBeAtRetirement=parseFloat(intHeadStart)*Math.pow((1.+(parseFloat(intExpRateOfRet)/100.)),intAgeDiff);	//--------
					
					if(dAmtHeadStartWillBeAtRetirement>=dAmtPerMonthAtRetirement/(parseFloat(intARate)/(100.*12.)))
					{
						var strTemp = "";
						strTemp += (isEmpty(strTemp) ? "" : ";") + "7";
						document.frmExpensePlanner.txtError.value=strTemp;
						document.frmExpensePlanner.submit();
					}
						

					var intAmount;
					intAmount = Math.round((parseFloat(intAmtAtTodayPr) * 12 * 100) / parseFloat(intARate))	//-------------
					intAmtAtTodayPr = intAmount-parseFloat(intHeadStart);		//--------------
					intcalc1a = 1 + (parseFloat(intRateOfPrInc) / 100.);
					intcalc1b = Math.pow(intcalc1a,intAgeDiff);
					intSavingsTgt = Math.round(intAmtAtTodayPr * intcalc1b);

					//calculation for savings targets
					/*intcalc1a = 1 + (intRateOfPrInc / 100);
					intcalc1b = Math.pow(intcalc1a,intAgeDiff);
					intSavingsTgt = Math.round(intAmtAtTodayPr * intcalc1b);*/
					
					//calculation for monthly savings					
					intcalc1c = 1 + (parseFloat(intExpRateOfRet) / 100.);
					intcalc1d = 0;
					for(intI = 1; intI <= intAgeDiff; intI++) {
						intcalc1d = intcalc1d + Math.pow(intcalc1c,intI);
					}
					intSavPerYr = (intSavingsTgt / intcalc1d);
					intMonthlySavings = (intSavPerYr / 12);
				
					//calculation for monthly savings in Year1
					intcalc1e = 1 + (parseFloat(intExpRateOfRet) / 100.);
					intcalc1f = 1 + (parseFloat(intRateOfPrInc) / 100.);
					intI = 0;
					intcalc1g = 0;
					for(intJ=intAgeDiff; intJ>0 && intI<intAgeDiff; intJ--,intI++) {
						intcalc1g = intcalc1g + ((Math.pow(intcalc1f,intI)) * (Math.pow(intcalc1e,intJ)));
					}
					intYr1MonthlySavings = (intSavingsTgt / intcalc1g) / 12;
					document.frmExpensePlanner.hdnMonthlySavings.value = intMonthlySavings;
					document.frmExpensePlanner.hdnYr1MonthlySavings.value = intYr1MonthlySavings;
					//document.frmExpensePlanner.txtTarget.value=intSavingsTgt;
					document.frmExpensePlanner.txtTarget.value=dAmtPerMonthAtRetirement;
					document.frmExpensePlanner.txtWorkingLife.value=intAgeDiff;
					//added-----
					document.frmExpensePlanner.txtAmtAtTodayPrice.value=intAmtAtTodayPr1;
					document.frmExpensePlanner.txtHeadStart.value=intHeadStart;
					//----------					
					document.frmExpensePlanner.submit();	
					


			}
			//both validations work
		}
		//result = true
	}

	function btnCalc_onclickForRetirement() {
		
		if (fnValidate1ForRetirement() == true) {
			
			//addition for head start
			if(document.frmExpensePlanner.txtHeadStart.value=="")	//empty head start
			{
				intHeadStart=0;
				document.frmExpensePlanner.txtHeadStart.value="0";
			}
			else
			{	
				intHeadStart=stripCommas(fnTrimString(document.frmExpensePlanner.txtHeadStart.value));				
			}
			if(fnTrimString(document.frmExpensePlanner.txtRateOfPriceInc.value)=="")	
			{
				intRateOfPrInc=0;
				document.frmExpensePlanner.txtRateOfPriceInc.value="0";
			}
			else
			{	
				intRateOfPrInc=fnTrimString(document.frmExpensePlanner.txtRateOfPriceInc.value);				
			}
			return true
		} //if data correct
		
	}
	function trapkeystrokeforamount()
	{
		var ke=event.keyCode;
		if(!(ke>=48 && ke<=57) && ke!=44)
		{
			event.keyCode=0;
			return;
		}
		
	}
	function trapkeystrokens6foramount(e)
	{
		var ke = e.which;
		
		if(!(ke>=48 && ke<=57) && ke!=8 && ke!=44 && ke!=0)	//0 for back/ahead keys
		{
			return false;
		}
	}
	function trapkeystroke()
	{
		var ke=event.keyCode;
		if(!(ke>=48 && ke<=57))
		{
			event.keyCode=0;
			return;
		}
		
	}
	function trapkeystrokens6(e)
	{
		var ke = e.which;
		//same logic as trapkeystroke followed
		if(!(ke>=48 && ke<=57) && ke!=8 && ke!=0)
		{
			return false;
		}
	}
	function stripCommas(str)
	{
		var strReturn=str;
		var index;
		while((index=strReturn.indexOf(","))!=-1)
		{
			strReturn=strReturn.substring(0,index)+strReturn.substring(index+1);
		}
		return strReturn;
	}

	function allowNumbers(s)
	{
		var szKey=String.fromCharCode(event.keyCode);
		var szTotal=s+szKey;
		//alert(szTotal);
		if(szTotal=="-")
			return;
		if(!fnCheckNumeric(fnTrimString(szTotal)))
		{
			event.keyCode=0;
			return;
		}
		if(parseFloat(szTotal)>100.)
		{
			event.keyCode=0;
			return;
		}
	}
	function allowNumbersku1(s)
	{
		//alert("szPrInc="+szPrInc);
		//alert("s="+s);

		if(!fnCheckNumeric(fnTrimString(s)))
		{
			document.frmExpensePlanner.txtRateOfPriceInc.value=szPrInc;
			return;
		}
		var i;
		if((i=s.indexOf("."))!=-1)
		{
			var szAfterDecimal=s.substring(i+1);
			if(szAfterDecimal.length>2)
			{
				document.frmExpensePlanner.txtRateOfPriceInc.value=szPrInc;
				return;
			}			
		}
		if(parseFloat(s)>100. || parseFloat(s)<0.)
		{
			document.frmExpensePlanner.txtRateOfPriceInc.value=szPrInc;
			return;
		}
		else
			szPrInc=document.frmExpensePlanner.txtRateOfPriceInc.value;		
	}

	function allowNumbersku2(s)
	{
		if(!fnCheckNumeric(fnTrimString(s)))
		{
			document.frmExpensePlanner.txtExpRateOfReturn.value=szExpRateOfReturn;
			return;
		}
		var i;
		if((i=s.indexOf("."))!=-1)
		{
			var szAfterDecimal=s.substring(i+1);
			if(szAfterDecimal.length>2)
			{
				document.frmExpensePlanner.txtExpRateOfReturn.value=szExpRateOfReturn;
				return;
			}			
		}
		if(parseFloat(s)>100. || parseFloat(s)<0.)
		{
			document.frmExpensePlanner.txtExpRateOfReturn.value=szExpRateOfReturn;
			return;
		}
		else
			szExpRateOfReturn=document.frmExpensePlanner.txtExpRateOfReturn.value;
		
	}

