﻿// simple RegEx patterns to make life easy.

var reOneOrMoreDigits = /[\d+]/;

var reNoDigits = /[^\d]/gi;



function doMask(textBox) {



	var keyCode = event.which ? event.which : event.keyCode;



	// enter, backspace, delete and tab keys are allowed thru

	if(keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46)

        return true;



	// get character from keyCode....dealing with the "Numeric KeyPad"

	// keyCodes so that it can be used

	var keyCharacter = cleanKeyCode(keyCode);



	// grab the textBox value and the mask

	var val = textBox.value;

	var mask = textBox.mask;



	// simple Regex to check if key is a digit

	if(reOneOrMoreDigits.test(keyCharacter) == false)

        return false;



	// get value minus any masking by removing all non-numerics

	val = val.replace(reNoDigits,'');



	// add current keystroke

	val += keyCharacter;



	// mask it...val holds the existing TextBox.value + the current keystroke

	textBox.value = val.maskValue(mask);



	setCaretAtEnd(textBox);



	return false;

}
	
	
function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas)
/**********************************************************************
	IN:
		NUM - the number to format
		decimalNum - the number of decimal places to format the number to
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
		bolCommas - put commas as number separators.
 
	RETVAL:
		The formatted number!
**********************************************************************/
{ 
    if (isNaN(parseInt(num))) return "NaN";

    //alert(num);

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1;		// Get sign of number
	
	// Adjust number so only the specified number of numbers after
	// the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
        tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign;					// Readjust for sign
	
	
	// Create a string object to do our formatting on
	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0){
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		}
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);


				
	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {

		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
                iStart -= 3;
		}		
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

	return tmpNumStr;		// Return our formatted string!
}
	
	

// puts starting chars in field

function onFocusMask(textBox) {

	var val = textBox.value;

	var mask = textBox.mask;

	if(val.length == 0 || val == null) {

        var i = mask.indexOf('#');

        textBox.value = mask.substring(0,i);

	}

	setCaretAtEnd(textBox);

	// set just in case.

	textBox.maxlength = mask.length;

}

// blank field if no digits entered

function onBlurMask(textBox) {

	var val = textBox.value;

	// if no digits....nada entered.....blank it.

	if(reOneOrMoreDigits.test(val) == false) {

        textBox.value = '';

	}

}

String.prototype.maskValue = function(mask) {

	var retVal = mask;

	var val = this;



	//loop thru mask and replace #'s with current value one at a time

	for(var i=0;i<val.length;i++) {

		retVal = retVal.replace(/#/i, val.charAt(i));

	}

	// get rid of rest of #'s

	retVal = retVal.replace(/#/gi, "");

	return retVal;

}

// The Numeric KeyPad returns keyCodes that ain't all that workable.

//

// ie: KeyPad '1' returns keyCode 97 which String.fromCharCode converts to an 'a'.

//

// This cheesy way allows the Numeric KeyPad to be used

	function cleanKeyCode(key)

	{

        switch(key)

        {

        case 96: return "0"; break;

        case 97: return "1"; break;

        case 98: return "2"; break;

        case 99: return "3"; break;

        case 100: return "4"; break;

        case 101: return "5"; break;

        case 102: return "6"; break;

        case 103: return "7"; break;

        case 104: return "8"; break;

        case 105: return "9"; break;

        default: return String.fromCharCode(key); break;

        }

	}


function setCaretAtEnd (field) {

	if (field.createTextRange) {

        var r = field.createTextRange();

        r.moveStart('character', field.value.length);

        r.collapse();

        r.select();

	}

}


// <!-- This script and many more are available free online at -->

// <!-- The JavaScript Source!! http://javascript.internet.com -->


function Show_Stuff(Click_Menu)
// Function that will swap the display/no display for
// all content within span tags
{
    if (Click_Menu.style.display == "none")
    {
        Click_Menu.style.display = "";
    }
    else
    {
//Click_Menu.style.display = "none";
        Click_Menu.style.display = "";
    }
}


function round(number,X) {

// rounds number to X decimal places, defaults to 2

    X = (!X ? 2 : X);

    return Math.round(number*Math.pow(10,X))/Math.pow(10,X);

}

// End -->

// <!-- Hide script from old browsers

// A Loan Calculator

// designed Paul Colton

// based on a demo by Netscape Communications, Inc.

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 formatCurrency(num) {
//num = num.toString().replace(/\$|\,/g,'');
//if(isNaN(num))
//num = "0";
//sign = (num == (num = Math.abs(num)));
//num = Math.floor(num*100+0.50000000001);
//cents = num%100;
//num = Math.floor(num/100).toString();
//if(cents<10)
//cents = "0" + cents;
//for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
//num = num.substring(0,num.length-(4*i+3))+','+
//num.substring(num.length-(4*i+3));
//return (((sign)?'':'-') + '$' + num + '.' + cents);
//}

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, 100, 10000000, "Principal")) {
        form.payment.value = "Invalid";
        return;
    }

    var i = form.interest.value;
    if (i > 1.0) {
        i = i / 100.0;
        // form.interest.value = i;
    }

    i /= 12;
    var pow = 1;
    for (var j = 0; j < form.payments.value*12; j++)

        pow = pow * (1 + i);

    form.payment.value = ( (form.principal.value * pow * i) / (pow - 1) );
    //alert(form.payment.value);
    //form.payment.value = parseNumb(form.payment);
		
    form.payment.value = "$" + FormatNumber(form.payment.value,2,true,false,true)
		//if(form.payment.value.indexOf(".")==form.payment.value.length-1)
		//	form.payment.value = form.payment.value.replace('.','');
		
		//form.payment.value = "$ " + form.payment.value;
        }
	
function computeFormTextChange(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)) {
        form.payment.value="$0";
        return;
    }

    //if (!checkNumber(form.payments, 1, 480, "# of payments") ||
    //    !checkNumber(form.interest, .001, 99, "Interest") ||
    //    !checkNumber(form.principal, 100, 10000000, "Principal")) {
    //    form.payment.value = "Invalid";
    //    return;
    //}

    var i = form.interest.value;
    if (i > 1.0) {
        i = i / 100.0;
        // form.interest.value = i;
    }

    i /= 12;
    var pow = 1;
    for (var j = 0; j < form.payments.value*12; j++)

        pow = pow * (1 + i);

    form.payment.value = ( (form.principal.value * pow * i) / (pow - 1) );
    //alert(form.payment.value);
    //form.payment.value = parseNumb(form.payment);
    form.payment.value = "$" + FormatNumber(form.payment.value,2,true,false,true);
    if(form.payment.value.indexOf(".")==form.payment.value.length-2)
        form.payment.value = form.payment.value + "0" ;
	
    //form.payment.value = "$ " + form.payment.value;

}


function clearForm(form) {
    form.payments.value = "";
    form.interest.value = "";
    form.principal.value = "";
}

function parseMonth(pyear, pmonth) {
//alert("Inside parseMonth ");
    var year  = pyear;
    var month = pmonth;
    var period;
    var indx;
	
    period = Math.ceil(month*1 + year*12);

    return period;
}


//=====================================================================
// calc loan amount
function CalcLoan()
{
    var LoanAmt
    	var RepayAmount
    	var InterestRate
    	var MonthTerm
		var year
		var month
		//alert("inside CalcLoan");
		//alert(document.getElementById('RepayAmt3').value);
		
    	//if (checkRepay(document.getElementById('RepayAmt3')) &&
    	//  checkIntRate(document.getElementById('IntRate3')) &&
    	//  checkTermY(document.getElementById('TermYear3')) &&
    	//  checkTermM(document.getElementById('TermMonth3'))
        //  )
        //{
        RepayAmount  = document.getElementById('RepayAmt3').value
        InterestRate = document.getElementById('IntRate3').value/1200
        year = document.getElementById('TermYear3').value;
    month = document.getElementById('TermMonth3').value
        //alert("Before parseMonth");
        MonthTerm    = parseMonth(year,month);
			
    //alert("After MonthTerm");
			
    LoanAmt = RepayAmount * (1 - Math.pow((1 + InterestRate*1),-MonthTerm))/InterestRate
        //alert(LoanAmt);
        document.getElementById('LoanAmt3').value = LoanAmt.toString();
			
    document.getElementById('LoanAmt3').value = round(Math.ceil(document.getElementById('LoanAmt3').value),2);
			
			
    //document.getElementById('LoanAmt3').value = "$ " + document.getElementById('LoanAmt3').value;
			
    document.getElementById('LoanAmt3').value = parseNumb(document.getElementById('LoanAmt3'));
			
    document.getElementById('LoanAmt3').value = "$" + FormatNumber(document.getElementById('LoanAmt3').value,2,true,false,true)
        //if(document.getElementById('LoanAmt3').value.indexOf(".")==document.getElementById('LoanAmt3').value.length-1)
        //	document.getElementById('LoanAmt3').value = document.getElementById('LoanAmt3').value.replace('.','');


			
    	//} else
        //{
    	//	document.getElementById('LoanAmt3').value = " "
    	//}
        }

function checkLoan(pLoan) {
	var LoanAmt = pLoan
        var status

        if (checkEnter(LoanAmt,"Loan Amount")) {
            status = checkNumb(LoanAmt,"Loan Amount")
        }

	return status
        }

function checkRepay(pRepay) {
	var RepayAmt = pRepay
        var status   = true

        if (checkEnter(RepayAmt,"Repay Amount")) {
            if (checkNumb(RepayAmt,"Repay Amount")) {
                if (RepayAmt.value == 0) {
                    //alert("The Repay Amount can not be zero.")
                    status = false
                }
            } else {
                status = false
            }
        } else {
            status = false
                }

	return status
        }

function checkIntRate(pIntRate) {
	var IntRate = pIntRate
        var status  = true

        if (checkEnter(IntRate,"Interest Rate")) {
            if (checkNumb(IntRate,"Interest Rate")) {
                if (IntRate.value == 0) {
                    alert("The Interest Rate can not be zero.")
                    status = false
                }
            } else {
                status = false
            }
        } else {
            status = false
                }

	return status
        }

function checkTermY(pYear) {
	var TermYear = pYear
        var status   = true

        if (checkEnter(TermYear,"Year Period")) {
            if (checkNumb(TermYear,"Year Period")) {
                if (TermYear.value> 30) {
                    alert("The Year Period can not be longer than 30 years.")
                    status = false
                }
            } else {
                status = false
            }
        } else {
            status = false
                }

	return status
        }

function parseNumb(pnumbstr) {
    var numb = pnumbstr.value
        var indx

        if (numb.length> 0) {
            indx = numb.indexOf(",")
        } else {
            indx = -1
                }
    while (indx != -1) {
        numb = numb.substring(0,indx) + numb.substring(indx*1 + 1,numb.length)
            indx = numb.indexOf(",")
            }

    if (numb.length> 0) {
        indx = numb.indexOf(" ")
            } else {
        indx = -1
            }
    while (indx != -1) {
        numb = numb.substring(0,indx) + numb.substring(indx*1 + 1,numb.length)
            indx = numb.indexOf(" ")
            }
    if (numb == "") {
        numb = 0
            }
    return numb
        }


function ParseDollar(pNumber) {
    var money = ""
        var numb = Math.round(pNumber)
        var indx1
        var indx2 = 0

        numb = "" + numb
        indx1 = numb.length - 1

        while (indx1> -1) {
            indx2 += 1
            if (indx2 == 4) {
                money = "," + money
                indx2 = 1
            }
            money = numb.substring(indx1,indx1*1 + 1) + money
            indx1 -= 1
        }

    money = "$ " + money

        return money
        }

function checkEnter(pfield, pname) {
    var field = pfield.value
        var msg
        var status = true

        if (field.length == 0) {
            msg = "The '" + pname + "' field must be entered."
            alert(msg)
            status = false
        }

    return status
        }

function checkNumb(pnumb, pname) {
    var numb = pnumb.value
        var message
        var indx
        var status = false

        if (numb.length == 0) {
            status = true
        }

    for (var indx = 0; indx < numb.length; indx++) {  /* the field should contain at least one digit */
        if (numb.charAt(indx)>= "0" && numb.charAt(indx) <= "9") {
            status = true
                }
    }

    for (var indx = 0; indx < numb.length; indx++) {
        if (!((numb.charAt(indx)>= "0" && numb.charAt(indx) <= "9") ||
              numb.charAt(indx) == " " ||
              numb.charAt(indx) == "." ||
              numb.charAt(indx) == ",")) {
            status = false
                }
    }

    if (!status) {
        msg = "The '" + pname + "' field must be a number."
            alert(msg)
            }
    return status
        }


function checkTermM(pMonth) {
	var TermMonth = pMonth
        var status    = true

        if (checkEnter(TermMonth,"Month Period")) {
            if (checkNumb(TermMonth,"Month Period")) {
                //if (TermMonth.value> 11) {
				//alert("Please use the Year field to enter a period longer than 11 months.")
				//status = false
                //}
            } else {
                status = false
            }
        } else {
            status = false
                }

	return status
        }

function FormatCurrency(objNum)
{
    var num = objNum.value.replace('$','');
    var ent, dec, dot;
    if (num != '' && num != objNum.oldvalue)
    {
        num = MoneyToNumber(num);
        if (!isNaN(num))
        {
            var ev = (navigator.appName.indexOf('Netscape') != -1)?Event:event;
            ent = num.split('.')[0];
            dec = num.split('.')[1];
            if (dec || ev.keyCode == 190)
            {
                dot = '.';
                if (dec.toString().length > 2) dec = dec.toString().substr(0,2);
            }
            else
            {
                dec = '';
                dot = '';
            }
            objNum.value = AddCommas(ent) + dot + dec;
            objNum.oldvalue = objNum.value;
        }
        objNum.value = '$' + objNum.oldvalue;
    }
}
 
function MoneyToNumber(num)
{
    return (num.replace(/,/g, ''));
 
}
 
function AddCommas(num)
{
    numArr=new String(num).split('').reverse();
    for (i=3;i<numArr.length;i+=3)
    {
        numArr[i]+=',';
    }
    return numArr.reverse().join('');
}
 
function number_onblur(objNum)
{
    var num = objNum.oldvalue;
    if (num.charAt(num.toString().length-1) == '.') num = num.replace('.','');
    objNum.value = "$" + num;
}

