
<!--
var nastynum;
var passfield;
var sign; //if positive, sign = 1.  If negative, sign = -1.
var pctage	//If a percentage, pctage = 1, if a home value or mortgage, 0
var retfield;
var savings;
var pctsaved;

function beautify()
{
        var uglynum;
        var prettynum = "$";
        var uglyptr = 0;
        var numtrios;
        var leadingdigs;
        var numcommas;

        uglynum = passfield.toFixed(2);
        uglynum = uglynum.toString();

		//Trying to take care of case when sales price is negative
		if (uglynum.substr(0,1) == '-') //Shave off minus sign
			uglynum = uglynum.substr(1, uglynum.length-1);

        numtrios = Math.floor(uglynum.length / 3);
        leadingdigs = uglynum.length % 3;
        numcommas = numtrios - ((numtrios > 1 && leadingdigs == 0) ? 2 : 1);

		if (sign == -1)	//If we're outputting a negative
			prettynum += "(";

        // put out ll or 1st ddd
        if (leadingdigs > 0)
        {
                prettynum += uglynum.substr(0,leadingdigs);
                uglyptr += leadingdigs;
        }
        else
                if (numtrios > 1)
                {
                        prettynum += uglynum.substr(0,3);
                        uglyptr += 3;
                }

        // put out ,ddd as often as needed
        while (numcommas-- > 0)
        {
                prettynum += "," + uglynum.substr(uglyptr,3);
                uglyptr += 3;
        }

        // put out .dd
        prettynum += uglynum.substr(uglyptr,3);

		if (sign == -1)	//If we're outputting a negative
			prettynum += ")";
			
        retfield = prettynum;
        return true;
}

function pretty()
{
	var prettynum;
	if (pctage)
		retfield = passfield.toFixed(1) + '%';
	else
		retfield = '$' + parseInt(passfield);
}


function prune()
{
    var nicenum;
    var holder;
	var done = 0;
	var badthing = 0;
	var numpoints = 0;
	
//	document.calc.comment.value = "hi from prune " + nastynum;

	// If entry was null, give 'er a 0 string.
	if(nastynum.length == 0)
	{
		nicenum = "0";
		done = 1;
	}
	
	// Check for more goblins
	else
	{
		// If entry was $xxx we will shave off the first $
		if (nastynum.substr(0,1) =='$' && nastynum.length > 1)
			nastynum = nastynum.substr(1,nastynum.length-1);

		// Next we shave off leading zeroes.  They seem to screw up parseInt() further down.
		while (nastynum.substr(0,1) == '0' && !done)
		{
			if (nastynum.length > 1)
			{
				nastynum = nastynum.substr(1, nastynum.length-1);
			}
			
			// If we've got nothing but one or more 0's, just keep one around
			else
			{
				nicenum = "0";
				done = 1;
			}			
		}	
		
		// Check each byte individually
		for (var i=0; (i<nastynum.length && badthing == 0); i++)
		{
			// Now we're qccepting a single decimal point
			// Glitch: apparently isNan() accepts a blank as a number which causes confusion during calculation. Fixed below:
			if (nastynum.substr(i,1) < '0' || nastynum.substr(i,1) > '9')
			{

				if (nastynum.substr(i,1) == '.')
				{
					numpoints++;
					if (numpoints > 1)
						badthing = 1;
				}
				else
					if (i > 0 && nastynum.substr(i,1) == '%' && pctage == 1)
					{					
						nastynum = nastynum.substr(0,i);	//Strip % and whatever follows
					}
					else
					{
						badthing = 1;
					}

			}		
		}
	} // End goblin check
	

	// If no error & we haven't already filled nicenum
	if (!badthing && !done)
		nicenum = nastynum;

	// If there's a negative, lone $, or any other funny character anywhere in the entry, complain
	if (badthing)
	{
		document.calc.comment.value = "Non-numeric character(s) detected: " + nastynum;
		return false;
	}
	
	// Make integer available to calculate()
	else
	{

		if (pctage == 0)
			retfield = parseInt(nicenum);
		else 
			retfield = parseFloat(nicenum);
		return true;
	}
}


function calculate()
{
	var hvalue;		//input
	var m1balance;	//input
	var m2balance;	//input
	var hv1;
	var hv2;
	var hv3;
	var dsc1;		//input
	var dsc2;
	var dsc3;
	var dsc4;
	var lbf1;		//input
	var lbf2;
	var lbf3;
	var lbf4;
	var bbf1;		//input
	var bbf2;
	var bbf3;
	var bbf4;
	var cc1;		//input
	var cc2;
	var cc3;
	var pt1;		//input
	var pt2;
	var pt3;
	var pt4;
	var mb1;
	var mb2;
	var mb3;
	var sp1;
	var sp2;
	var sp3;
	var sp3nice;
	var sp1nice;
		
		var badentry = 0;

    //Retrieve each debt field & validate
	pctage = 0;
	nastynum = document.calc.hvalue.value;
	if (prune() == true)
		hvalue = retfield;
	else
		badentry = 1;

    nastynum = document.calc.m1balance.value;
    if (prune() == true)                
		m1balance = retfield;        
	else                
		badentry = 1;

    nastynum = document.calc.m2balance.value;
    if (prune() == true)    
        m2balance = retfield;
    else 
		badentry = 1;

	pctage = 1;	//% character allowed now
	
    nastynum = document.calc.dsc1.value;
    if (prune() == true)
        dsc1 = retfield;
    else
        badentry = 1;

    nastynum = document.calc.lbf1.value;
    if (prune() == true)
    	lbf1 = retfield;
    else
       	badentry = 1;

    nastynum = document.calc.bbf1.value;
    if (prune() == true)
      	bbf1 = retfield;
    else
        badentry = 1;

    nastynum = document.calc.cc1.value;
    if (prune() == true)
      	cc1 = retfield;
    else
        badentry = 1;

    nastynum = document.calc.pt1.value;
    if (prune() == true)
       	pt1 = retfield;
    else
       	badentry = 1;

	// If all entries were validated go ahead
	if (!badentry)
	{
		//Calculate selling price
		//Just use hvalue

		//Calculate discounts & credits
		dsc2 = dsc3 = (dsc1/100) * hvalue;

		//Calculate list broker fee
		lbf2 = (lbf1/100) * hvalue;
		
        //Calculate buyer's broker fee
        bbf2 = bbf3 = (bbf1/100) * hvalue;
	
        //Calculate closing costs
        cc2 = cc3 = (cc1/100) * hvalue;

        //Calculate 1 point of buyer's loan
        pt2 = pt3 = (pt1/100) * hvalue;

        //Calculate mortgage balances
        mb1 = mb2 = mb3 = m1balance + m2balance;

		//Calculate sales proceeds
		sp1 = hvalue - dsc2 - lbf2 - bbf2 - cc2 - pt2 - mb1;
		sp2 = hvalue - dsc3 - 0 - bbf3 - cc3 - pt3 - mb2;
		sp3 = hvalue - mb2;
		
		savings = sp3 - sp1;
		pctsaved = savings/sp1;
		
		//Output all positive numbers first
		// Here go the home values ($ but no %)

		sign = 1;	//Home value is positive
		pctage = 0;
		passfield = hvalue;
		beautify();
		document.calc.hv1.value = retfield;
		document.calc.hv2.value = retfield;
		document.calc.hv3.value = retfield;
		
		//Here go the % but no $ outputs
		
		pctage = 1;
		passfield = dsc1;
		pretty();
		document.calc.dsc1.value = retfield;
		
		passfield = lbf1;
		pretty();
		document.calc.lbf1.value = retfield;
		
		passfield = bbf1;
		pretty();
		document.calc.bbf1.value = retfield;
				
		passfield = cc1;
		pretty();
		document.calc.cc1.value = retfield;
				
		passfield = pt1;
		pretty();
		document.calc.pt1.value = retfield;
		
		//Now refresh home value & mortgages - positive & $
		pctage = 0;
		passfield = hvalue;
		pretty();
		document.calc.hvalue.value = retfield;
		
		passfield = m1balance;
		pretty();
		document.calc.m1balance.value = retfield;
		
		passfield = m2balance;
		pretty();
		document.calc.m2balance.value = retfield;
				
		sign = -1;	//All values from discount to mortgage balances are neg
		pctage = 0; //$ not %
		passfield = dsc2;
		beautify();
		document.calc.dsc2.value = retfield;
		document.calc.dsc3.value = retfield;

		passfield = lbf2;
		beautify();
		document.calc.lbf2.value = retfield;
		
		passfield = bbf2;
		beautify();
		document.calc.bbf2.value = retfield;
		document.calc.bbf3.value = retfield;
		
		passfield = cc2;
		beautify();
		document.calc.cc2.value = retfield;
		document.calc.cc3.value = retfield;

		passfield = pt2;
		beautify();
		document.calc.pt2.value = retfield;
		document.calc.pt3.value = retfield;
		
		passfield = mb1;
		beautify();
		document.calc.mb1.value = retfield;
		document.calc.mb2.value = retfield;
		document.calc.mb3.value = retfield;
		
		//Sale proceeds could possibly be negative.  If so, use () & axe minus sign.
		sign = sp1 >= 0 ? 0 : -1;
		
		passfield = sp1;
		beautify();
		document.calc.sp1.value = retfield;

		sign = sp2 >= 0 ? 0 : -1;		
		passfield = sp2;
		beautify();
		document.calc.sp2.value = retfield;
		
		sign = sp3 >= 0 ? 0 : -1;
		passfield = sp3;
		beautify();
		document.calc.sp3.value = retfield;
		
		passfield = savings;
		beautify();
		savings = retfield;
		
		pctsaved *= 100;
		
		//Take care of case when sales price is negative, so % is negative
		
		if (pctsaved >= 0)
       	 	document.calc.comment.value = 
"You net " + savings + " (" +   pctsaved.toFixed(0) + "%) more with OptionPlus!" 

		else
			document.calc.comment.value =
"You net " + savings + " more with OptionPlus!";
   	} // End of if (!badentry)

} // End of calculate()

//-->

