	//Loan

function format_number(temp_number)
{
	temp_number = temp_number.toString();
	desimal_point = temp_number.indexOf('.');

	if(desimal_point == -1)
	{
		result_float = '.00'
		int_number = temp_number;
	}
	else
	{
		temp_desimal = temp_number.substring(temp_number.indexOf('.'),temp_number.length);

		if(temp_desimal.length == 2)
		{
			result_float = temp_desimal + '0';
		}
		else
		{
			result_float = temp_desimal;
		}
		int_number = temp_number.substring(0,temp_number.indexOf('.'));
	}

	result_number = '';
	ij = int_number.length-1;
	index_comma = 0;
	while(ij >= 0)
	{
		index_comma++;
		result_number =  int_number.charAt(ij) + result_number;
		if((index_comma == 3)&&(ij > 0))
		{
			result_number =  ',' + result_number;
			index_comma = 0
		}
		ij--;
	}

	result_number = result_number + result_float;

	return result_number;
}

function getAmortization(a,n,p) {

	var RetVal=document.getElementById("pay");
	if ((a == null || a == 0) || (n == null || n == 0) || (p == null || p == 0)) {
        RetVal.value = "Incomplete Data";
		return RetVal;
	}
	else {
		var i=0;
		var sATline="";
		//var oAmortizationTable=document.getElementById("amortizationtable");
		//oAmortizationTable.style.visibility="visible";
		document.getElementById("tr_space").style.display= 'block';
		var sCR=String.fromCharCode(13);
		var sTab=String.fromCharCode(27);

		/* Calculate amortization and write table to text area **/
		var payment = getPayment(a,n,p);
		RetVal.value = format_number((Math.round(payment*100)/100));
		//oAmortizationTable.value += "Month  Balance    Principal  Interest  Payment    Total Interest" + sCR;
		var balance=a;
		var interest = 0.0;
		var principal=0.0;
		var totalinterest=0.0;
		//my_table = document.getElementById("amortizationtable");
		//my_body = my_table.getElementsByTagName("tbody").item(0);
		if(document.getElementById("amortizationtable") != null)
			document.getElementById("td_amortizationtable").removeChild(document.getElementById("amortizationtable"));
		my_table = document.createElement("TABLE");
		my_table.id = "amortizationtable";
		my_table.width = "100%";
		my_table.cellPadding = "0";
		my_table.cellSpacing = "0";
		//my_table.border=1;
		my_table.style.borderColor='#b1c8ec';
		my_table.style.borderStyle='solid';
		my_table.style.borderWidth= 1;

		my_body = document.createElement("TBODY");

		mycurrent_row = document.createElement("TR");

		mycurrent_cell = document.createElement("TD");
		mycurrent_cell.align = 'center';
		mycurrent_cell.bgColor = "#0066b3";
		mycurrent_cell.style.color = "#FFFFFF";
		mycurrent_cell.style.borderColor='#b1c8ec';
		mycurrent_cell.style.borderStyle='solid';
		mycurrent_cell.style.borderWidth= 1;
		mycurrent_cell.innerText = 'Month';
    	mycurrent_row.appendChild(mycurrent_cell);


    	mycurrent_cell = document.createElement("TD");
		mycurrent_cell.align = 'center';
		mycurrent_cell.bgColor = "#0066b3";
		mycurrent_cell.style.color = "#FFFFFF";
		mycurrent_cell.style.borderColor='#b1c8ec';
		mycurrent_cell.style.borderStyle='solid';
		mycurrent_cell.style.borderWidth= 1;
		mycurrent_cell.innerText = 'Total Payments';
    	mycurrent_row.appendChild(mycurrent_cell);


    	mycurrent_cell = document.createElement("TD");
		mycurrent_cell.align = 'center';
		mycurrent_cell.bgColor = "#0066b3";
		mycurrent_cell.style.color = "#FFFFFF";
		mycurrent_cell.style.borderColor='#b1c8ec';
		mycurrent_cell.style.borderStyle='solid';
		mycurrent_cell.style.borderWidth= 1;
		mycurrent_cell.innerText = 'Principal';
    	mycurrent_row.appendChild(mycurrent_cell);

    	mycurrent_cell = document.createElement("TD");
		mycurrent_cell.align = 'center';
		mycurrent_cell.bgColor = "#0066b3";
		mycurrent_cell.style.color = "#FFFFFF";
		mycurrent_cell.style.borderColor='#b1c8ec';
		mycurrent_cell.style.borderStyle='solid';
		mycurrent_cell.style.borderWidth= 1;
		mycurrent_cell.innerText = 'Interest';
    	mycurrent_row.appendChild(mycurrent_cell);

    	mycurrent_cell = document.createElement("TD");
		mycurrent_cell.align = 'center';
		mycurrent_cell.bgColor = "#0066b3";
		mycurrent_cell.style.color = "#FFFFFF";
		mycurrent_cell.style.borderColor='#b1c8ec';
		mycurrent_cell.style.borderStyle='solid';
		mycurrent_cell.style.borderWidth= 1;
		mycurrent_cell.innerText = 'Current Balance';
    	mycurrent_row.appendChild(mycurrent_cell);

    	mycurrent_cell = document.createElement("TD");
		mycurrent_cell.align = 'center';
		mycurrent_cell.bgColor = "#0066b3";
		mycurrent_cell.style.color = "#FFFFFF";
		mycurrent_cell.style.borderColor='#b1c8ec';
		mycurrent_cell.style.borderStyle='solid';
		mycurrent_cell.style.borderWidth= 1;
		mycurrent_cell.innerText = 'Total Interest';
    	mycurrent_row.appendChild(mycurrent_cell);

    	my_body.appendChild(mycurrent_row);

    	for (i=1;i<=n;i++) {
			interest = balance*p/1200;
			totalinterest += interest;
			principal = payment-interest;
			balance -= principal;

			mycurrent_row = document.createElement("TR");

			mycurrent_cell = document.createElement("TD");
			mycurrent_cell.align = 'center';
			mycurrent_cell.style.borderColor='#b1c8ec';
			mycurrent_cell.style.borderStyle='solid';
			mycurrent_cell.style.borderWidth= 1;
			mycurrent_cell.style.fontSize = "10";
			mycurrent_cell.innerText = i.toString();
        	mycurrent_row.appendChild(mycurrent_cell);

        	mycurrent_cell = document.createElement("TD");
        	mycurrent_cell.align = 'right';
        	mycurrent_cell.style.borderColor='#b1c8ec';
			mycurrent_cell.style.borderStyle='solid';
			mycurrent_cell.style.borderWidth= 1;
			mycurrent_cell.style.paddingRight = 4;
			mycurrent_cell.style.fontSize = "10";
			mycurrent_cell.innerText = format_number(Math.round(i*payment*100)/100);
        	mycurrent_row.appendChild(mycurrent_cell);

        	mycurrent_cell = document.createElement("TD");
        	mycurrent_cell.align = 'right';
        	mycurrent_cell.style.borderColor='#b1c8ec';
			mycurrent_cell.style.borderStyle='solid';
			mycurrent_cell.style.borderWidth= 1;
			mycurrent_cell.style.paddingRight = 4;
			mycurrent_cell.style.fontSize = "10";
			mycurrent_cell.innerText = format_number(Math.round(principal*100)/100);
        	mycurrent_row.appendChild(mycurrent_cell);

        	mycurrent_cell = document.createElement("TD");
        	mycurrent_cell.align = 'right';
        	mycurrent_cell.style.borderColor='#b1c8ec';
			mycurrent_cell.style.borderStyle='solid';
			mycurrent_cell.style.borderWidth= 1;
			mycurrent_cell.style.paddingRight = 4;
			mycurrent_cell.style.fontSize = "10";
			mycurrent_cell.innerText = format_number(Math.round(interest*100)/100);
        	mycurrent_row.appendChild(mycurrent_cell);

        	mycurrent_cell = document.createElement("TD");
        	mycurrent_cell.align = 'right';
        	mycurrent_cell.style.borderColor='#b1c8ec';
			mycurrent_cell.style.borderStyle='solid';
			mycurrent_cell.style.borderWidth= 1;
			mycurrent_cell.style.paddingRight = 4;
			mycurrent_cell.style.fontSize = "10";
			mycurrent_cell.innerText = format_number(Math.round(balance*100)/100);
        	mycurrent_row.appendChild(mycurrent_cell);

        	mycurrent_cell = document.createElement("TD");
        	mycurrent_cell.align = 'right';
        	mycurrent_cell.style.borderColor='#b1c8ec';
			mycurrent_cell.style.borderStyle='solid';
			mycurrent_cell.style.borderWidth= 1;
			mycurrent_cell.style.paddingRight = 4;
			mycurrent_cell.style.fontSize = "10";
			mycurrent_cell.innerText = format_number(Math.round(totalinterest*100)/100);
        	mycurrent_row.appendChild(mycurrent_cell);

        	my_body.appendChild(mycurrent_row);

		}
		my_table.appendChild(my_body);
		document.getElementById("td_amortizationtable").appendChild(my_table);
	}
}

function getSpaces(n) {
		var i=0;
		var sSpaces="";
		for (i=0;i<n;i++) {sSpaces += " ";}
		return sSpaces;
}

function getPayment(a,n,p) {
		var acc=0;
		var base = 1 + p/1200;
		for (i=1;i<=n;i++)
			{ acc += Math.pow(base,-i); }
		return a/acc;
}



	// mortgage
function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}

function dosum()
{
  var mi = document.temps.IR.value / 1200;
  var base = 1;
  var mbase = 1 + mi;
  for (i=0; i<document.temps.YR.value * 12; i++)
  {
    base = base * mbase
  }
  document.temps.PI.value = format_number(floor(document.temps.LA.value * mi / ( 1 - (1/base))))
  document.temps.MT.value = format_number(floor(document.temps.AT.value / 12))
  document.temps.MI.value = format_number(floor(document.temps.AI.value / 12))
  var dasum = document.temps.LA.value * mi / ( 1 - (1/base)) +
        document.temps.AT.value / 12 + 
        document.temps.AI.value / 12;
  document.temps.MP.value = format_number(floor(dasum));
}

function formatNum(Vnum) {

   if(Vnum > 99000000) {
   alert("Sorry, this will not generate numbers larger that 99 million.");
   focus();
   } else {
   
   var V10million = parseInt(Vnum / 10000000);

   var V1million = (Vnum % 10000000)  / 1000000;
      if(V1million / 1000000 == 1) {
      V1million = 1;
      } else
      if(V1million < 1) {
      V1million = "0";
     } else {
      V1million = parseInt(V1million,10);
     }

    var V100thousand = (Vnum % 1000000)  / 100000;
      if(V100thousand / 100000 == 1) {
      V100thousand = 1;
      } else
      if(V100thousand < 1) {
      V100thousand = "0";
     } else {
      V100thousand = parseInt(V100thousand,10);
     }

   var V10thousand = (Vnum % 100000)  / 10000;
      if(V10thousand / 10000 == 1) {
      V10thousand = 1;
      } else
      if(V10thousand < 1) {
      V10thousand = "0";
      } else {
      V10thousand = parseInt(V10thousand,10);
      }

   var V1thousand = (Vnum % 10000)  / 1000;
      if(V1thousand / 1000 == 1) {
      V1thousand = 1;
      } else
      if(V1thousand < 1) {
      V1thousand = "0";
     } else {
      V1thousand = parseInt(V1thousand,10);
     }

   var Vhundreds = (Vnum % 1000)  / 100;
      if(Vhundreds / 100 == 1) {
      Vhundreds = 1;
      } else
      if(Vhundreds < 1) {
      Vhundreds = "0";
     } else {
      Vhundreds = parseInt(Vhundreds,10);
     }

   var Vtens = (Vnum % 100)  / 10;
      if(Vtens / 10 == 1) {
      Vtens = 1;
      } else
      if(Vtens < 1) {
      Vtens = "0";
     } else {
      Vtens = parseInt(Vtens,10);
     }

   var Vones = (Vnum % 10)  / 1;
      if(Vones / 1 == 1) {
      Vones = 1;
      } else
      if(Vones < 1) {
      Vones = "0";
     } else {
      Vones = parseInt(Vones,10);
     }

  var Vcents = parseInt(((Vnum % 1) * 100),10);

 if(Vcents < 1) {
  Vcents = "00";
  }
  else
  if(Vcents % 10 == 0) {
  Vcents = Vcents + "0";
  }
  else
  if(Vcents % 10 == Vcents) {
  Vcents = "0" + Vcents;
  } else {
  Vcents = Vcents;
  }

  if(Vcents == "900") {
  Vcents = "90";
  } else
  if(Vcents == "800") {
  Vcents = "80";
  } else 
  if(Vcents == "700") {
  Vcents = "70";
  } else 
  if(Vcents == "600") {
  Vcents = "60";
  } else 
  if(Vcents == "500") {
  Vcents = "50";
  } else 
  if(Vcents == "400") {
  Vcents = "40";
  } else 
  if(Vcents == "300") {
  Vcents = "30";
  } else
  if(Vcents == "200") {
  Vcents = "20";
  } else
  if(Vcents == "100") {
  Vcents = "10";
  } else {
  Vcents = Vcents;
  }

   
   var Vformat = "";

   if(Vnum >= 10000000) {
   Vformat = (V10million + "" + V1million + "," + V100thousand + "" + V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 1000000) {
   Vformat = (V1million + "," + V100thousand + "" + V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 100000) {
   Vformat = (V100thousand + "" + V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 10000) {
   Vformat = (V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 1000) {
   Vformat = (V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 100) {
   Vformat = (Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 10) {
   Vformat = (Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 1) {
   Vformat = (Vones + "." + Vcents);
   } else {
   Vformat = ("0." + Vcents);
   }

  return Vformat;

  }
}



function checkNumber(input, min, max, msg)

{

    msg = msg + " field has invalid data: " + input.value;



    var str = input.value;

    for (var i = 0; i < str.length; i++) {

        var ch = str.substring(i, i + 1)

        if ((ch < "0" || "9" < ch) && ch != '.') {

            alert(msg);

            return false;

        }

    }

    var num = 0 + str

    if (num < min || max < num) {

        alert(msg + " not in range [" + min + ".." + max + "]");

        return false;

    }

    input.value = str;

    return true;

}



function computeField(input)

{

    if (input.value != null && input.value.length != 0)

        input.value = "" + eval(input.value);

    computeForm(input.form);

}

function computeForm(form)

{

    if ((form.payments.value == null || form.payments.value.length == 0) ||

        (form.interest.value == null || form.interest.value.length == 0) ||

        (form.principal.value == null || form.principal.value.length == 0)) {

        return;

    }



    if (!checkNumber(form.payments, 1, 480, "# of payments") ||

        !checkNumber(form.interest, .001, 99, "Interest") ||

        !checkNumber(form.principal, 1, 10000000, "Principal")) {

        form.fv.value = "Invalid";

        return;

    }
    var i = form.interest.value;

    if (i > 1.0) {

        i = i / 100.0;


    }

    i /= 12;


   var pow = form.principal.value;
    
    for (var j = 0; j < form.payments.value *12; j++)

        pow = (pow * i) + (pow *1);

    var Vfv = pow;

    form.fv.value = formatNum(pow);

    var Vtotalint = (Vfv - form.principal.value);
		
		form.totalint.value = formatNum(Vtotalint);

}

function clearForm(form) {

    form.payments.value = "";
    form.interest.value = "";
    form.principal.value = "";

}


	// Saving

function validateNumber(localItem, minValue, maxValue, msg) {
    var decPtAt = 0;
    for (var i = 0; i < localItem.value.length; i++){
        var localChar  = localItem.value.charAt(i);
        if (localChar < "0" || localChar > "9"){
            if (localChar == "." && decPtAt == 0){
                decPtAt = i + 1;
            }else{
                if (localChar == " "){
                    localChar = "Spaces cannot";
                }else if (localChar == "."){
                    localChar = "Only one decimal point can";
                }else{
                    localChar = "The character \"" + localChar
                                + "\" cannot";
                }
                alert(localChar + " be used in the " + msg + " field." +
                    "  Please correct your entry to use only numerical" +
                    " values, a single decimal point, and no spaces or" +
                    " commas.");
                localItem.focus();
                localItem.select();
                return false;
            }
        }
    }
    return checkLimits(localItem, minValue, maxValue, msg);
}

function checkLimits(localItem, minValue, maxValue, msg) {
    if (localItem.value < minValue || localItem.value > maxValue){
        alert("Value for the " + msg + " field must be between "
            + minValue + " and " + maxValue + ".");
        localItem.focus();
        localItem.select();
        return false;
    }
    return true;
}

function getArgs(){
/*  Based on Example 13-5 in "JavaScript: The Definitive Guide," 3rd ed.,
    by David Flanagan, O'Reilly (1998) p. 245.                            */
    var args = new Object();
    var query = window.location.search.substring(1);
    var pairs = new Array();
    if ((pairs = query.split("&")) == null) pairs = localSplit(query, "&");
    for (var i =0; i < pairs.length; i++){
        var pos = pairs[i].indexOf('=');
        if (pos == -1) continue;
        var argname = pairs[i].substring(0,pos);
        var value = pairs[i].substring(pos+1);
        args[argname] = unescape(value);
    }
    return args;
}

function localSplit(thisStr, thisChar){
    var localStr;
    var pairs = new Array();
    var pos = 0;
    var i = 0;
    while ((pos = localStr.indexOf(thisChar)) > -1){
        pairs[i++] = localStr.substring(0, pos);
        localStr = localStr.substring(pos + 1);
    }
    return pairs;
}

function displayDec(val, decs){
    var factr = 1;
    for (var i = 0; i < decs; i++){
        factr *= 10;
    }
    var outputStr = Math.round(factr * val) + '';
    while (outputStr.length - decs < 1){
        outputStr = '0' + outputStr;
    }
    var pos = outputStr.length - decs;
    return outputStr.substring(0, pos) + '.' + outputStr.substring(pos);
}

function getFourDigitYear(date_obj){
    var thisyear = date_obj.getYear();
    // Following Y2k fix should work till 3799 :-), by which time getYear() should be fully replaced by getFullYear()...
    if (thisyear < 1900){
        thisyear += 1900;
    }
    return thisyear;
}

function setFourDigitYear(date_obj, thisyear){
    // Y2k fix
    if (navigator.appName == "Microsoft Internet Explorer" && thisyear < 2000){
        thisyear = thisyear - 1900;
    }
    date_obj.setYear(thisyear);
}

function amortizationTable() {
    this.fontFace       = 'Arial';
    this.paymentNr      = new Array();
    this.deposit        = new Array();
    this.interestEarned = new Array();
    this.totalInterest  = new Array();
    this.balance        = new Array();
    this.paymentMonths  = new Array();
    this.args           = new Object();
    this.setValues      = setValues;
    this.doAmortization = doAmortization;
    this.ShowTable      = ShowTable;
    return;
}

function doAmortization(globalItem) {
    var returnValue = false;
    if ((globalItem.nrOfYears.value       == null
            || globalItem.nrOfYears.value.length    == 0)
        || (globalItem.interestRate.value == null
            || globalItem.interestRate.value.length == 0)
        || (globalItem.amountDesired.value   == null
            || globalItem.amountDesired.value.length   == 0)) {
        return returnValue;
    }
    if (!validateNumber(   globalItem.nrOfYears, 0.08333,       40, "Term (years)")
        || !validateNumber(globalItem.interestRate,    1,       99, "Annual Interest Rate")
        || !validateNumber(globalItem.amountDesired,   1, 10000000, "Amount")) {
        globalItem.monthlyDeposit.value = "Error";
        return returnValue;
    }
    this.initialDeposit      = parseFloat(globalItem.initialDeposit.value);
    this.amountDesired       = parseFloat(globalItem.amountDesired.value);
    var rate                 = parseFloat(globalItem.interestRate.value) / 1200.0;
    var nrOfDeposits         = Math.round(parseFloat(globalItem.nrOfYears.value) * 12);
    if (globalItem.compounding[0].checked){
        var nrDays   = new Array();
        var msPerDay = 24 * 60 * 60 * 1000;
    }
    var depositDate  = new Date((1999 + parseInt(globalItem.startYear.selectedIndex)),
                                parseInt(globalItem.startMonth.selectedIndex),
                                (1 + parseInt(globalItem.startDay.selectedIndex)));
    var depositYear  = getFourDigitYear(depositDate);
    var depositMonth = depositDate.getMonth();
    var depositDay   = depositDate.getDate();
    if (depositDay > 28){
        depositDay = 1;
        depositDate.setDate(depositDay);
        depositMonth++;
        if (depositMonth > 11){
            depositYear++;
            depositMonth = 0;
            setFourDigitYear(depositDate, depositYear);
        }
    }
    depositDate.setMonth(depositMonth);
    var thisTime = depositDate.getTime();
    var lastTime = thisTime;
    var monthNr  = 0;
    var yearNr   = 0;
    for (var i = 0; i <= nrOfDeposits; i++){
        if (depositMonth > 11){
            depositYear++;
            depositMonth = 0;
            setFourDigitYear(depositDate, depositYear);
        }
        this.paymentMonths[i] = depositMonth;
        monthNr               = depositMonth + 1;
        yearNr                = depositYear;
        this.paymentNr[i]     = monthNr + '<BR>' + yearNr;
        depositDate.setMonth(depositMonth++);
        if (globalItem.compounding[0].checked){
            thisTime  = depositDate.getTime();
            nrDays[i] = Math.round((thisTime - lastTime) / msPerDay);
            if (yearNr == 2000 && monthNr == 1) nrDays[i] = 31;
            lastTime  = thisTime;
        }
    }
    var factr        = 1;
    var ratePlusOne  =  rate + 1;
    for (var i = 0; i < nrOfDeposits; i++){
        factr *= ratePlusOne;
    }
    if (factr > 1) {
        var factr2 = rate / (factr - 1)
        this.unroundedDeposit = (this.amountDesired - this.initialDeposit * factr) * factr2;
        globalItem.unroundedDeposit.value = this.unroundedDeposit;
        globalItem.monthlyDeposit.value =
            displayDec(globalItem.unroundedDeposit.value, 2);
        var annualDeposit = globalItem.unroundedDeposit.value * 12;
        var dailyDeposit  = annualDeposit / 365.00;
        var weeklyDeposit = dailyDeposit * 7;
        globalItem.dailyDeposit.value = format_number(displayDec(dailyDeposit, 2));
        globalItem.weeklyDeposit.value = format_number(displayDec(weeklyDeposit, 2));
        returnValue = true;
    }
    if (returnValue) {
        var blnc       = this.initialDeposit;
        var intRcd     = 0.0;
        var totInt     = 0.0;
        this.deposit[0]        = displayDec(this.initialDeposit, 2);
        this.interestEarned[0] = displayDec(intRcd, 2);
        this.totalInterest[0]  = displayDec(totInt, 2);
        this.balance[0]        = this.deposit[0];
        if (globalItem.compounding[0].checked) rate = parseFloat(globalItem.interestRate.value) / 36500.0;
        var depositEst = parseFloat(globalItem.unroundedDeposit.value);
        var skipMonthsFraction = 24 / 31.
        var iterations = 0;
        var errBal     = 1.0;
        globalItem.monthlyDeposit.value = '';
        globalItem.weeklyDeposit.value  = ' ';
        globalItem.dailyDeposit.value   = ' ';
        while (Math.abs(errBal) > 0.004 && iterations++ < 99){
            globalItem.monthlyDeposit.value += ':';
            blnc   = this.initialDeposit;
            totInt = 0.0;
            for (var i = 1; i <= nrOfDeposits; i++){
                if (globalItem.compounding[0].checked){
                    intRcd  = 0;
                    for (var j = 0; j < nrDays[i]; j++){
                        intRcd += blnc * rate;
                        blnc   += blnc * rate;
                    }
                }else{
                    intRcd = blnc * rate;
                    blnc  += intRcd;
                }
                if (globalItem.skipDeposit[0].checked
                    && (this.paymentMonths[i] == 6
                    || this.paymentMonths[i] == 11)) {
                    blnc           += skipMonthsFraction * depositEst;
                    this.deposit[i] = displayDec(skipMonthsFraction * depositEst, 2);
                }else{
                    blnc           += depositEst;
                    this.deposit[i] = displayDec(depositEst, 2);
                }
                this.interestEarned[i] = displayDec(intRcd, 2);
                totInt += intRcd;
                this.totalInterest[i]  = displayDec(totInt, 2);
                this.balance[i]        = displayDec(blnc, 2);
            }
            errBal      = this.amountDesired - blnc;
            depositEst += errBal * factr2;
        }
        if (Math.abs(errBal) > 0.004){
            returnValue = false;
        }else{
            globalItem.monthlyDeposit.value = format_number(displayDec(depositEst, 2));
            globalItem.weeklyDeposit.value  = format_number(displayDec(84 * depositEst / 365.00, 2));
            globalItem.dailyDeposit.value   = format_number(displayDec(12 * depositEst / 365.00, 2));
        }
    }
    if (returnValue == false){
        globalItem.monthlyDeposit.value = "Error";
        globalItem.weeklyDeposit.value  = "Error";
        globalItem.dailyDeposit.value   = "Error";
    }
    return returnValue;
}

function tableData(contents, label, characteristics, fontdata){
    this.contents  = new Array();
    this.contents  = contents;
    this.label     = label;
    this.tdOpen    = '\t\t\t<TD' + characteristics;
    this.tdCont    = '>\n' +
                     '\t\t\t\t<FONT' + fontdata + '>\n\t\t\t\t\t';
    this.tdClose   = '\n\t\t\t\t</FONT>\n\t\t\t</TD>\n';
    this.ShowRow   = ShowRow;
    return;
}

function ShowRow(rowNr, rowLength){
    var i0 = rowNr * rowLength;
    var returnString = '            <TR>\n';
    returnString += this.tdOpen + ' align="right"' + this.tdCont + this.label + this.tdClose;
    var dataOut = ' ';
    for (var i = i0; i <= rowLength + i0; i++){
        if ((rowNr > 0 && i == i0)||this.contents[i]==null||this.contents[i]=='NaN'){
            dataOut = '&nbsp;';
        }else{
            dataOut = this.contents[i];
        }
        returnString += this.tdOpen + ' align="center"' + this.tdCont + dataOut + this.tdClose;
    }
    returnString += '            </TR>\n';
    return returnString;
}

function ShowTable() {
    var rowLength       = 12;
    var nrOfRows        = Math.ceil((this.balance.length - 1) / rowLength);
    var Characteristics = ' bgcolor="#EEEEEE" valign="bottom"';
    var Fontdata        = ' face="Arial Narrow" size="1" color="#000000"';
    paymentNrOut        = new tableData(this.paymentNr, '<B>Month<BR>Year</B>', Characteristics, Fontdata);
    Characteristics     = ' bgcolor="#FFFFFF" valign="top"';
    depositOut          = new tableData(this.deposit, '<B>Deposit</B>&nbsp;($)', Characteristics, Fontdata);
    interestOut         = new tableData(this.interestEarned, '<B>Interest Earned</B>&nbsp;($)', Characteristics, Fontdata);
    totalIntOut         = new tableData(this.totalInterest, '<B>Total Interest</B>&nbsp;($)', Characteristics, Fontdata);
    balanceOut          = new tableData(this.balance, '<B>Balance</B>&nbsp;($)', Characteristics, Fontdata);
    var returnString = '        <TABLE border="1" cellpadding="3" cellspacing="0" bgcolor="#CCCCCC">\n';
    for (var ir = 0; ir < nrOfRows; ir++){
        returnString += paymentNrOut.ShowRow(ir, rowLength);
        returnString += depositOut.ShowRow(ir, rowLength);
        returnString += interestOut.ShowRow(ir, rowLength);
        returnString += totalIntOut.ShowRow(ir, rowLength);
        returnString += balanceOut.ShowRow(ir, rowLength);
    }
    returnString += '        </TABLE>\n';
    return returnString;
}

function dateSelector(selectorName,year){
    var monthNames = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
    var returnString = '<SELECT style="width:47px" NAME="' + selectorName + 'Month">\n';
    var today = new Date();
    for (var i = 0; i < 12; i++){
        returnString += '\t\t\t\t<OPTION VALUE="' + i + '"';
        if (i == today.getMonth()) returnString += ' SELECTED';
        returnString += '>' + monthNames[i] + '</OPTION>\n';
    }
    returnString += '\t\t\t</SELECT>\n';
    returnString += '\t\t\t<SELECT style="width:40px" NAME="' + selectorName + 'Day">\n';
    for (var i = 1; i < 29; i++){
        returnString += '\t\t\t\t<OPTION VALUE="' + i + '"';
        if (i == today.getDate()) returnString += ' SELECTED';
        returnString += '>' + i + '</OPTION>\n';
    }
    returnString += '\t\t\t</SELECT>\n';
    returnString += '\t\t\t<SELECT style="width:53px" NAME="' + selectorName + 'Year">\n';
    for (var i = year; i < year+11; i++){
        returnString += '\t\t\t\t<OPTION VALUE="' + i + '"';
        if (i == getFourDigitYear(today)) returnString += ' SELECTED';
        returnString += '>' + i + '</OPTION>\n';
    }
    returnString += '\t\t\t</SELECT>\n';
    return returnString;
}

function setValues(globalItem){
    this.args = getArgs();
    if (this.args.nrOfYears != null)
        globalItem.nrOfYears.value = parseFloat(this.args.nrOfYears);
    else
        globalItem.nrOfYears.value = 2.0;
    if (this.args.interestRate != null)
        globalItem.interestRate.value = parseFloat(this.args.interestRate);
    else
        globalItem.interestRate.value = 5.0;
    if (this.args.compounding != null)
        globalItem.compounding.value = this.args.compounding;
    else
        globalItem.compounding.value = 'daily';
    if (globalItem.compounding.value == 'daily'){
        globalItem.compounding[0].checked = true;
        globalItem.compounding[1].checked = false;
    }else{
        globalItem.compounding[0].checked = false;
        globalItem.compounding[1].checked = true;
    }
    if (this.args.initialDeposit != null)
        globalItem.initialDeposit.value = parseFloat(this.args.initialDeposit);
    else
        globalItem.initialDeposit.value = 100.0;
    if (this.args.amountDesired != null)
        globalItem.amountDesired.value = parseFloat(this.args.amountDesired);
    else
        globalItem.amountDesired.value = 6000.0;
    if (this.args.skipDeposit != null)
        globalItem.skipDeposit.value = this.args.skipDeposit;
    else
        globalItem.skipDeposit.value = 'yes';
    if (globalItem.skipDeposit.value == 'yes'){
        globalItem.skipDeposit[0].checked = true;
        globalItem.skipDeposit[1].checked = false;
    }else{
        globalItem.skipDeposit[0].checked = false;
        globalItem.skipDeposit[1].checked = true;
    }
    var today = new Date();
    if (this.args.startYear != null)
        globalItem.startYear.selectedIndex = this.args.startYear - 1999;
    else
        globalItem.startYear.selectedIndex = getFourDigitYear(today) - 1999;
    if (this.args.startMonth != null)
        globalItem.startMonth.selectedIndex = this.args.startMonth;
    else
        globalItem.startMonth.selectedIndex = today.getMonth();
    if (this.args.startDay != null)
        globalItem.startDay.selectedIndex = this.args.startDay - 1;
    else
        globalItem.startDay.selectedIndex = today.getDate() - 1;
}



	// Retirement

function calcOutput(form)
{
    initinvst = eval(form.initinvst.value)      
    pmt = eval(form.pmt.value)
    iin = eval(form.iin.value/100)
    jin = eval(form.jin.value/100)
    nin = eval(form.nin.value)
    iout = eval(form.iout.value/100)
    jout = eval(form.jout.value/100)
    nout = eval(form.nout.value)
    
// Check if the field is empty, use zero for calc if empty
    if (initinvst == "" || initinvst == null) initinvst=0;
    if (pmt == "" || pmt == null) pmt=0;
    if (iin == "" || iin == null) iin=0;
    if (jin == "" || jin == null) jin=0;
    if (nin == "" || nin == null) nin=0;
    if (iout == "" || iout == null) iout=0;
    if (jout == "" || jout == null) jout=0;
    if (nout == "" || nout == null) nout=0; 
        
    ieffin =(1+iin)/(1+jin)-1
    ieffout =(1+iout)/(1+jout)-1
    idiff = ieffin-jin
    
    if (idiff != 0)
        pvsumin=(Math.pow(1+ieffin,nin)-Math.pow(1+jin,nin))*(1+ieffin)/idiff;
        else
        pvsumin=nin*Math.pow(1+ieffin,nin);
    if (idiff != 0)
        pvinit=initinvst*Math.pow(1+ieffin,nin);
        else
        pvinit=initinvst; 
    pvrtnin=pvsumin*pmt+pvinit    
    form.pvrtnin.value = ""+format_number(Math.round(pvrtnin))
	balance=pvrtnin
    
    idiff=iin-jin
    if (idiff != 0)
        fvsumin=(Math.pow(1+iin,nin)-Math.pow(1+jin,nin))*(1+iin)/idiff;
        else
        fvsumin=nin*Math.pow(1+iin,nin);
    if (idiff != 0)
        fvinit=initinvst*Math.pow(1+iin,nin);
        else
        fvinit=initinvst;
    fvrtnin=fvsumin*pmt+fvinit
    form.fvrtnin.value = ""+format_number(Math.round(fvrtnin))
    
    wdrw=(initinvst+pmt*nin)/nout
    if (ieffout != 0)
        invst=wdrw*(Math.pow(1/(1+ieffout),nout)-1)/((1/(1+ieffout))-1);
        else
        invst=wdrw*nout;
    wdrw=pvrtnin*wdrw/invst
    form.wdrw.value = ""+format_number(Math.round(wdrw))
	wdrawal=wdrw 
	
}


function cashFlow()
{          
    pvsumin=0
    fvsumin=0   
    bal=balance
	wdrw=wdrawal
	block='';
	
block += '<Table cellpadding="0" cellspacing="0" style="borderColor=#b1c8ec" border="1" bordercolor="#b1c8ec" text="#000000"  align="center"><colgroup><col width=30><col width=100><col width=100><col width=100><caption><b>Cash Flow into Investment</b></caption>';
block += '<Th bgcolor="#0066b3" class="white_title">'+ "year" +'</Th>'+'<Th bgcolor="#0066b3" class="white_title">'+ "payment" +'</Th>'+'<Th bgcolor="#0066b3" class="white_title">'+ "total pv" +'</Th>'+'<Th bgcolor="#0066b3" class="white_title">'+ "total fv"+'</Th>';
block += '<Tr>';
for (year=0; year<nin; year++)
    {
	jpmt=pmt*Math.pow(1+jin,year)   
    pvsumin+=jpmt
    fvsumin+=jpmt   
    pvsumin*=(1+ieffin)
    fvsumin*=(1+iin)
    totpvsumin=pvsumin+initinvst*Math.pow(1+ieffin,year+1)    
    totfvsumin=fvsumin+initinvst*Math.pow(1+iin,year+1)
    block += '<Td>'+(year+1)+'</Td>'+'<Td>'+""+format_number(Math.round(jpmt))+'</Td>'+'<Td>'+""+format_number(Math.round(totpvsumin))+'</Td>'+'<Td>'+""+format_number(Math.round(totfvsumin))+'</Td>';
    block += '</Tr>';
    }
block += '</Table>';


block +='<p></p>'
// Calculate the withdrawal cash flow
block += '<Table cellpadding="0" cellspacing="0" style="borderColor=#b1c8ec" border="1" bordercolor="#b1c8ec" text="#000000"  align="center"><caption> <b>Cash Withdrawal from Investment</b></caption><colgroup><col width=30><col width=100><col width=100>';
block += '<Th bgcolor="#0066b3" class="white_title">'+ "year" +'</Th>'+'<Th bgcolor="#0066b3" class="white_title">'+ "withdraw pv" +'</Th>'+'<Th bgcolor="#0066b3" class="white_title">'+ "balance pv" +'</Th>';
block += '<Tr>';
for (year=0; year<nout; year++)
    {   
    bal-=wdrw
    block += '<Td>'+(year+1)+'</Td>'+'<Td>'+""+format_number(Math.round(wdrw))+'</Td>'+'<Td>'+""+format_number(Math.round(bal))+'</Td>';
    bal*=(1+iout)
    wdrw*=(1+jout)
    block += '</Tr>';  
    }
block += '</Table>';
document.getElementById('td_cash').innerHTML=block

}   

function clear_cashFlow()
{   
	document.getElementById('td_cash').innerHTML='';

}