//<![CDATA[
function getStrippedValidNumber(value) {
    s1 = value;
    sReturn = '';
    stemp = '';
    foundDecimal = false;
    if (s1 == '') {
        s1 = '0';
        return s1;
    }
    for (var i = 0; i < s1.length; i++) {
        stemp = s1.charAt(i)
        if (!isNaN(stemp)) {
            sReturn = sReturn + stemp;
        }
        else if (stemp.search('-') != -1) {
            sReturn = sReturn + stemp
        }
        else if (stemp.search('\\.') != -1)  {
            if (isNaN(stemp)) {
                if (foundDecimal == false) {
                    sReturn = sReturn + stemp;
                    foundDecimal = true;
                }
            }
        }
    }
    if (sReturn == "") sReturn='0';
    return sReturn;
}

function currencyFormat(num) {
	//if (num == 0)	return "";
    if (isNaN(num) || num==Number.POSITIVE_INFINITY || num==Number.NEGATIVE_INFINITY) return "$0";
    //round number
    num = Math.round(num);
    strnum = num.toString();
	str = ""
    while (strnum.length > 3) {
        //add commas as appropriate
        str = ',' + strnum.substring(strnum.length - 3) + str;
        strnum = strnum.substring(0, strnum.length - 3);
    }
    return "$" + strnum + str;
}

function currencyFormatWithCents(num) {
    if (num == 0) return "$0";
    if (num.toString()=="") return "";
    if (isNaN(num) || num==Number.POSITIVE_INFINITY || num==Number.NEGATIVE_INFINITY) return "$0";
    //multiply num by 100, then round it (1 is added to number to deal with numbers less than 1)
    num = Math.round((parseFloat(num)+1) * 100);
    dollarStr = num.toString();
    //create string containing dec point and last two digits
    centStr = '.' + dollarStr.substring(dollarStr.length - 2);
    //take the numbers preceeding the decimal point and put into dollarStr (1 is subtracted to compensate for 1 added earlier)
    dollarStr = parseFloat(dollarStr.substring(0, dollarStr.length - 2)) - 1;
    dollarStr = dollarStr.toString();
	if (dollarStr == "") {
		dollarStr = "0";
	}
	else {
        while (dollarStr.length > 3) {
            //add commas as appropriate - dont add decimal point and places
            centStr = ',' + dollarStr.substring(dollarStr.length - 3) + centStr;
            dollarStr = dollarStr.substring(0, dollarStr.length - 3);
        }
    }
    return "$" + dollarStr + centStr;
}

//Validate currency input and format value. Number must be positive.
function validateCurrency(oInput) {
    var amount = null;
    amount = getStrippedValidNumber(oInput.value);

    if (parseFloat(amount) == amount) {
        if (amount < 0) {
            alert("Please enter a positive number.");
            oInput.value = "0";
            //oInput.focus();
            calculateSubtotals();
            return false;
        }
        else {
            oInput.value = currencyFormat(amount);
            calculateSubtotals();
        }
    }
    else {
        oInput.value = "0";
        //oInput.focus();
        calculateSubtotals();
        return false;
    }
}

/******************************************************************/
//Validate number of years. Number must be positive.
function validatePositiveNumber(oInput) {
    var amount = null;
    amount = getStrippedValidNumber(oInput.value);
    if (parseFloat(amount) == amount) {
        if (amount < 0) {
            alert("Please enter a positive number.");
            oInput.value = "0";
            oInput.focus();
            calculateSubtotals();
            return false;
        }
        else {
            oInput.value = amount;
            calculateSubtotals();
        }
    }
    else {
        oInput.value = "0";
        oInput.focus();
        calculateSubtotals();
        return false;
    }
}

//Calculate subtotal values
function calculateSubtotals() {
    var F_DebtTotal = parseFloat(getStrippedValidNumber($("txtA_Medical").value)) + parseFloat(getStrippedValidNumber($("txtB_Loan").value)) + parseFloat(getStrippedValidNumber($("txtC_Funeral").value)) + parseFloat(getStrippedValidNumber($("txtD_Mortgage").value)) + parseFloat(getStrippedValidNumber($("txtE_ChildrensEducation").value));
    var Income = parseFloat(getStrippedValidNumber($("txtG_FamilyIncomeAmount").value));
    var years = parseFloat(getStrippedValidNumber($("txtH_FamilyIncomeYears").value))
    var interest = parseFloat(getStrippedValidNumber($("txt_InterestRate").value));
    if (interest <= 0) {
        interest = 5;
        $("txt_InterestRate").value = interest;
    }
    var var1 = 1 - ( 1/(Math.pow(1 + (interest/100), years)));
    var var2 = (1 + (interest/100))/(interest/100);
    var I_FamilyIncomeTotal = Math.round(Income * var1 * var2);
    var L_AssetsTotal = parseFloat(getStrippedValidNumber($("txtJ_ExistingAssets").value)) + parseFloat(getStrippedValidNumber($("txtK_ExistingLifeInsurance").value))
    if (F_DebtTotal > 0) {
        $("txtF_DebtTotal").value = currencyFormat(F_DebtTotal);
    }
    else {
        $("txtF_DebtTotal").value = currencyFormat(0);
    }
    if (I_FamilyIncomeTotal > 0) {
        $("txtI_FamilyIncomeTotal").value = currencyFormat(I_FamilyIncomeTotal);
    }
    else {
        $("txtI_FamilyIncomeTotal").value = currencyFormat(0);
    }
    if (L_AssetsTotal > 0) {
        $("txtL_AssetsTotal").value = currencyFormat(L_AssetsTotal);
    }
    else {
        $("txtL_AssetsTotal").value = currencyFormat(0);
    }
}

//Calculate total values
function calculateTotals() {
    var M_LifeCoverTotal = null;
    var N_LifeCoverFamily = null;
    var O_ProtectionBenefit = null;
    M_LifeCoverTotal = (parseFloat(getStrippedValidNumber($("txtF_DebtTotal").value)) - parseFloat(getStrippedValidNumber($("txtL_AssetsTotal").value))) + parseFloat(getStrippedValidNumber($("txtI_FamilyIncomeTotal").value))
    N_LifeCoverFamily = parseFloat(getStrippedValidNumber($("txtF_DebtTotal").value)) - parseFloat(getStrippedValidNumber($("txtL_AssetsTotal").value))
    O_ProtectionBenefit = parseFloat(getStrippedValidNumber($("txtG_FamilyIncomeAmount").value))
    if (M_LifeCoverTotal > 0) {
        $("txtM_LifeCoverTotal").value = currencyFormat(M_LifeCoverTotal);
    }
    else {
        $("txtM_LifeCoverTotal").value = currencyFormat(0);
    }
    if (N_LifeCoverFamily > 0) {
        $("txtN_LifeCoverFamily").value = currencyFormat(N_LifeCoverFamily);
    }
    else {
        $("txtN_LifeCoverFamily").value = currencyFormat(0);
    }
    if (O_ProtectionBenefit > 0) {
        $("txtO_ProtectionBenefit").value = currencyFormat(O_ProtectionBenefit);
    }
    else {
        $("txtO_ProtectionBenefit").value = currencyFormat(0);
    }
}
//]]>