function resetForm( ) {
    document.getElementById( 'first_year' ).selectedIndex = 0;
    document.getElementById( 'second_year' ).selectedIndex = 0;
    document.getElementById( 'first_loan_length' ).selectedIndex = 4;
    document.getElementById( 'second_loan_length' ).selectedIndex = 4;
    document.getElementById( 'first_apr' ).value = 6;
    document.getElementById( 'second_apr' ).value = 6;

    clearOptions( 'first_make' );
    clearOptions( 'first_model' );
    clearOptions( 'first_cyl' );
    clearOptions( 'second_make' );
    clearOptions( 'second_model' );
    clearOptions( 'second_cyl' );
    clearInputs( 'first_year') ;
    clearInputs( 'second_year' );

    document.getElementById('first_car_title').innerHTML = "";
    document.getElementById('second_car_title').innerHTML = "";
    $('#chart_region').hide();
}

function clearOptions( tag ) {
    var o = document.getElementById( tag );

if ( o == null ) { alert(tag); }

    var l = o.options.length;
    for (i = l - 1; i>=0; i--) {
        o.remove(i);
    }

    // Populate default instruction
    var newOption = document.createElement("OPTION");
    document.getElementById(tag).options.add(newOption);

    if ( tag == 'first_year' || tag == 'second_year' ) {
        newOption.text = 'Select Year';
    } else if  ( tag == 'first_make' || tag == 'second_make' ) {
        newOption.text = 'Select Make';
    } else if  ( tag == 'first_model' || tag == 'second_model' ) {
        newOption.text = 'Select Model';
    } else if  ( tag == 'first_cyl' || tag == 'second_cyl' ) {
        newOption.text = 'Select Cylinder';
    }

    clearInputs( tag );
}

function clearInputs( tag ) {
    if ( tag == 'first_year' || tag == 'first_make' || tag == 'first_model' || tag == 'first_cyl' ) {
        document.getElementById('first_price').value = '';
        document.getElementById('first_monthly_payment').value = '';
        document.getElementById('first_payments_left').value = '';
        document.getElementById('first_amount_owed').value = '';
        document.getElementById('first_mpg').value = '';
        document.getElementById('first_miles').value = '';
        document.getElementById('first_price_gas').value = '';
    } else if ( tag == 'second_year' || tag == 'second_make' || tag == 'second_model' || tag == 'second_cyl' ) {
        document.getElementById('second_price').value = '';
        document.getElementById('second_mpg').value = '';
        document.getElementById('second_miles').value = '';
        document.getElementById('second_price_gas').value = '';
    }
}

$(document).ready(function() {
$.get(
    location.href + '?action=getYears1&time=' + new Date().getTime(),
    function (data) {
        var a = data.split( ',' );
        var l = a.length;
        var i;
        clearOptions('first_year');
        clearOptions('first_make');
        clearOptions('first_model');
        clearOptions('first_cyl');
        for ( i=0; i<l; i++ ) {
            var newOption = document.createElement("OPTION");
            document.getElementById('first_year').options.add(newOption);
            newOption.text = a[i];
            newOption.value = a[i];
        }
    }
);
$.get(
    location.href + '?action=getYears2&time=' + new Date().getTime(),
    function (data) {
        var a = data.split( ',' )
        var l = a.length;
        var i;
        clearOptions('second_year');
        clearOptions('second_make');
        clearOptions('second_model');
        clearOptions('second_cyl');
        for ( i=0; i<l; i++ ) {
            var newOption = document.createElement("OPTION");
            document.getElementById('second_year').options.add(newOption);
            newOption.text = a[i];
            newOption.value = a[i];
        }
    }
);
});

function getMakes1() {
    var y = document.getElementById('first_year').value;
    $.get(
        location.href + '?action=getMakes1&year1=' + y + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            var l = a.length;
            var i;
            clearOptions('first_make');
            clearOptions('first_model');
            clearOptions('first_cyl');
            for ( i=0; i<l; i++ ) {
                var newOption = document.createElement("OPTION");
                document.getElementById('first_make').options.add(newOption);
                newOption.text = a[i];
                newOption.value = a[i];
            }
        }
    );
}
function getMakes2() {
    var y = document.getElementById('second_year').value;
    $.get(
        location.href + '?action=getMakes2&year2=' + y + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            var l = a.length;
            var i;
            clearOptions('second_make');
            clearOptions('second_model');
            clearOptions('second_cyl');
            for ( i=0; i<l; i++ ) {
                var newOption = document.createElement("OPTION");
                document.getElementById('second_make').options.add(newOption);
                newOption.text = a[i];
                newOption.value = a[i];
            }
        }
    );
}
function getModel1() {
    var y = document.getElementById('first_year').value;
    var m = document.getElementById('first_make').value;
    $.get(
        location.href + '?action=getModel1&year1=' + y + '&make1=' + m + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            var l = a.length;
            var i;
            clearOptions('first_model');
            clearOptions('first_cyl');
            for ( i=0; i<l; i++ ) {
                var newOption = document.createElement("OPTION");
                document.getElementById('first_model').options.add(newOption);
                newOption.text = a[i];
                newOption.value = a[i];
            }
        }
    );
}
function getModel2() {
    var y = document.getElementById('second_year').value;
    var m = document.getElementById('second_make').value;
    $.get(
        location.href + '?action=getModel2&year2=' + y + '&make2=' + m + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            var l = a.length;
            var i;
            clearOptions('second_model');
            clearOptions('second_cyl');
            for ( i=0; i<l; i++ ) {
                var newOption = document.createElement("OPTION");
                document.getElementById('second_model').options.add(newOption);
                newOption.text = a[i];
                newOption.value = a[i];
            }
        }
    );
}
function getCyl1() {
    var y = document.getElementById('first_year').value;
    var m = document.getElementById('first_make').value;
    var md = document.getElementById('first_model').value;

    $.get(
        location.href + '?action=getCyl1&year1=' + y + '&make1=' + m + '&model1=' + md + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            var l = a.length;
            var i;
            clearOptions('first_cyl');
            for ( i=0; i<l; i++ ) {
                var newOption = document.createElement("OPTION");
                document.getElementById('first_cyl').options.add(newOption);
                newOption.text = a[i];
                newOption.value = a[i];
            }
        }
    );
}
function getCyl2() {
    var y = document.getElementById('second_year').value;
    var m = document.getElementById('second_make').value;
    var md = document.getElementById('second_model').value;

    $.get(
        location.href + '?action=getCyl2&year2=' + y + '&make2=' + m + '&model2=' + md + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            var l = a.length;
            var i;
            clearOptions('second_cyl');
            for ( i=0; i<l; i++ ) {
                var newOption = document.createElement("OPTION");
                document.getElementById('second_cyl').options.add(newOption);
                newOption.text = a[i];
                newOption.value = a[i];
            }
        }
    );
}
function getPrice1() {
    var y = document.getElementById('first_year').value;
    var m = document.getElementById('first_make').value;
    var md = document.getElementById('first_model').value;
    var c = document.getElementById('first_cyl').value;
    var floan_length = document.getElementById('first_loan_length').value;
    var floan_apr = document.getElementById('first_apr').value;

    document.getElementById('first_car_title').innerHTML = y + " " + m + " " + md;
    var num_payments = Math.max(floan_length - ((new Date()).getFullYear() - y), 0) * 12;
    $.get(
        location.href + '?action=getPrice1&year1=' + y + '&make1=' + m + '&model1=' + md + '&cyl1=' + c + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            document.getElementById('first_price').value = a[0].replace(/^\s+/,"");
            document.getElementById('first_mpg').value = a[1];
            document.getElementById('first_monthly_payment').value = 0;
            document.getElementById('first_amount_owed').value = 0;
            if (num_payments > 0) {
                // Calculate interest
                var interest_per_period = Math.max(floan_apr / 100.0 / 12, 0.001);
                var monthly_payment = Math.round(a[2] * interest_per_period / (1 - Math.pow(1 + interest_per_period, -1 * (floan_length * 12))));
                document.getElementById('first_monthly_payment').value = monthly_payment;

                // Calculate amount owed
                var amount_owed = a[2] * Math.pow((1 + interest_per_period), (floan_length * 12 - num_payments)) -
                    (monthly_payment / interest_per_period * (Math.pow((1 + interest_per_period), (floan_length * 12 - num_payments)) - 1));
                document.getElementById('first_amount_owed').value = Math.round(amount_owed);
            }
            document.getElementById('first_payments_left').value = num_payments;
            document.getElementById('first_miles').value = '15000';
            document.getElementById('first_price_gas').value = '4.00';
        }
    );
}

function getLoan1() {
    var y = document.getElementById('first_year').value;
    var m = document.getElementById('first_make').value;
    var md = document.getElementById('first_model').value;
    var c = document.getElementById('first_cyl').value;
    var floan_length = document.getElementById('first_loan_length').value;
    var floan_apr = document.getElementById('first_apr').value;

    var num_payments = Math.max(floan_length - ((new Date()).getFullYear() - y), 0) * 12;
    $.get(
        location.href + '?action=getPrice1&year1=' + y + '&make1=' + m + '&model1=' + md + '&cyl1=' + c + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            document.getElementById('first_monthly_payment').value = 0;
            document.getElementById('first_amount_owed').value = 0;
            if (num_payments > 0) {
                // Calculate interest
                var interest_per_period = Math.max(floan_apr / 100.0 / 12, 0.001);
                var monthly_payment = Math.round(a[2] * interest_per_period / (1 - Math.pow(1 + interest_per_period, -1 * (floan_length * 12))));
                document.getElementById('first_monthly_payment').value = monthly_payment;
                
                // Calculate amount owed
                var amount_owed = a[2] * Math.pow((1 + interest_per_period), (floan_length * 12 - num_payments)) - 
                    (monthly_payment / interest_per_period * (Math.pow((1 + interest_per_period), (floan_length * 12 - num_payments)) - 1));
                document.getElementById('first_amount_owed').value = Math.round(amount_owed);
            }
            document.getElementById('first_payments_left').value = num_payments;
        }
    );
}

function getPrice2() {
    var y = document.getElementById('second_year').value;
    var m = document.getElementById('second_make').value;
    var md = document.getElementById('second_model').value;
    var c = document.getElementById('second_cyl').value;

    document.getElementById('second_car_title').innerHTML = y + " " + m + " " + md;
    $.get(
        location.href + '?action=getPrice2&year2=' + y + '&make2=' + m + '&model2=' + md + '&cyl2=' + c + '&time=' + new Date().getTime(),
        function ( data ) {
            var a = data.split( ',' );
            document.getElementById('second_price').value = a[0].replace(/^\s+/,"");
            document.getElementById('second_mpg').value = a[1];
            document.getElementById('second_miles').value = '15000';
            document.getElementById('second_price_gas').value = '4.00';
        }
    );
}

function startCalculate() {
    var fyear = document.getElementById('first_year').value;
    var fmake = document.getElementById('first_make').value;
    var fmodel = document.getElementById('first_model').value;
    var fcyl = document.getElementById('first_cyl').value;
    var fprice = document.getElementById('first_price').value;
    var fmonpay = document.getElementById('first_monthly_payment').value;
    var fpayleft = document.getElementById('first_payments_left').value;
    var fowe = document.getElementById('first_amount_owed').value;
    var fmpg = document.getElementById('first_mpg').value;
    var fmiles = document.getElementById('first_miles').value;
    var fpricegas = document.getElementById('first_price_gas').value;
    var syear = document.getElementById('second_year').value;
    var smake = document.getElementById('second_make').value;
    var smodel = document.getElementById('second_model').value;
    var scyl = document.getElementById('second_cyl').value;
    var sprice = document.getElementById('second_price').value;
    var smpg = document.getElementById('second_mpg').value;
    var smiles = document.getElementById('second_miles').value;
    var spricegas = document.getElementById('second_price_gas').value;
    var sloan_length = document.getElementById('second_loan_length').value;
    var sloan_apr = document.getElementById('second_apr').value;

    if ( fyear == '' ) {
        //alert('Please select current car year!');
        alert( 'Please finish selecting your current car' );
        return false;
    }
    if ( fmake == '' ) {
        //alert('Please select current car make!');
        alert( 'Please finish selecting your current car' );
        return false;
    }
    if ( fmodel == '' ) {
        //alert('Please select current car model!');
        alert( 'Please finish selecting your current car' );
        return false;
    }
    if ( fcyl == '' ) {
        //alert('Please select current car cylinders!');
        alert( 'Please finish selecting your current car' );
        return false;
    }
    if ( fmiles == '' ) {
        //alert('Invaild current car miles/year!');
        alert( 'Please finish selecting your current car' );
        return false;
    }
    if ( fpricegas == '' ) {
        //alert('Invaild current car price of gas!');
        alert( 'Please finish selecting your current car' );
        return false;
    }
    if ( syear == '' ) {
        //alert('Please select new car year!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    if ( smake == '' ) {
        //alert('Please select new car make!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    if ( smodel == '' ) {
        //alert('Please select new car model!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    if ( scyl == '' ) {
        //alert('Please select new car cylinders!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    if ( sprice == '' ) {
        //alert('Invaild new car sell price!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    if ( smiles == '' ) {
        //alert('Invaild new car miles/year!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    if ( spricegas == '' ) {
        //alert('Invaild new car price of gas!');
        alert( 'Please finish selecting your new car' );
        return false;
    }
    $.get(
        location.href + '?action=chart' + 
                        '&fyear=' + fyear + '&fmake=' + fmake + '&fmodel=' + fmodel + '&fcyl=' + fcyl + 
                        '&fprice=' + fprice + '&fmonpay=' + fmonpay + '&fpayleft=' + fpayleft + '&fowe=' + fowe +
                        '&fmpg=' + fmpg + '&fmiles=' + fmiles + '&fpricegas=' + fpricegas + 
                        '&syear=' + syear + '&smake=' + smake + '&smodel=' + smodel + '&scyl=' + scyl + '&sloan_length=' + sloan_length + '&sloan_apr=' + sloan_apr + 
                        '&sprice=' + sprice + 
                        '&smpg=' + smpg + '&smiles=' + smiles + '&spricegas=' + spricegas + '&time=' + new Date().getTime(),
        function ( data ) {
            $('#chart_region').show();
//alert(data);            
            var spaceIndex = data.indexOf(' ');
            var breakeven = data.substr(0, spaceIndex);

            if ( breakeven == 0 ) {
                document.getElementById('recommendation').innerHTML =
                    'Purchase the ' + syear + ' ' + smake + ' ' + smodel;
            } else if ( breakeven > 0 ) {
                var yeartext = 'year';
                if ( breakeven > 1 ) { 
                    yeartext = 'years';
                }

                document.getElementById('recommendation').innerHTML = 'If you will keep the car for ' + breakeven + ' ' + yeartext + ' or more, <br/>' +
                    'purchase the ' + syear + ' ' + smake + ' ' + smodel;
            } else {
                document.getElementById('recommendation').innerHTML = 'Keep the ' + fyear + ' ' + fmake + ' ' + fmodel;
            }

            document.getElementById('div_chart').innerHTML = data.substr(spaceIndex + 1);
	}
    );
}
