var yearsSelect = document.getElementById('yearsUntilSelect');
yearsSelect.options.length = 0;

for (var i = 0; i < 99; i++)
{
    var cur = i + 1;
    yearsSelect.options[i] = new Option(cur,cur);
}

var rateSelect = document.getElementById('rateSelect');
rateSelect.options.length = 0;

for (var n = 0; n < 20; n++)
{
    var optValue = n + 1;
    rateSelect.options[n] = new Option(optValue,optValue);
}

yearsSelect.options[17].selected = true;
rateSelect.options[7].selected = true;

function calculate()
{
    var data = {};
    
    function getInputData(d)
    {
        d.years = $wr.toNumber(yearsSelect.options[yearsSelect.selectedIndex].value);
        d.current = $wr.toNumber(document.getElementById('currentInput').value);
        d.annualCost = parseFloat(document.getElementById('annualCurrentCostInput').value);
        d.rate = parseFloat(rateSelect.options[rateSelect.selectedIndex].value);
         
        return d;
    }
    data = getInputData(data);
     
    function calculateInitData(d)
    {
        d.monthlyRate = (d.rate / 12) / 100;
        d.totalMonths = d.years * 12;
        d.inflation = 0.06;
        return d;
    }
    data = calculateInitData(data);
   
    var output = [];
    var runningBalance = 0.0;
    
    if ($wr.isNumeric(data.current)) {
        runningBalance = parseFloat(data.current);
    }
    
    // calculate value of savings (if any) until college
    for(var m = 1; m <= data.totalMonths; m++) {
        runningBalance += (runningBalance * data.monthlyRate);
        
        if (m % 12 === 0) {
            output.push(runningBalance);
        }
    }
    
    var firstYearCost = data.annualCost;
    // calculate the cost for the first year
    for(var x = 1; x <= (data.years); x++)
    {
        firstYearCost += (firstYearCost * data.inflation); 
    }
    data.firstYearCost = firstYearCost;
   
    var costArray = [];
    costArray.length = 6;
    costArray[0] = $wr.round(data.annualCost,0);
    totalCost = costArray[0];
    for(var y = 0; y <= (data.years + 5); y++)
    {
        costArray[y + 1] = $wr.round((costArray[y] + (costArray[y] * data.inflation)), 0); 
    }
   
    var resultsDiv = document.getElementById('resultsDiv');
    resultsDiv.style.display = 'block';
    
    function sumCosts(yearsToSum)
    {
        return $wr.sum(costArray.slice(data.years, data.years + yearsToSum));
    }
    
    function calcResultsForYears(numberOfYears)
    {
        var result = {years: numberOfYears};
        result.cost = sumCosts(numberOfYears);
        //result.payment = $wr.paymentAmountFutureValue(result.cost - runningBalance, (data.years * 12), ((data.rate/100)/12) );
        result.payment = $wr.pmt(result.cost-runningBalance, data.rate/100, 12, data.years);
        return result;
    }
    
    var yearlyResults = [];
    
    for(var z = 2; z <= 7; z++) {
        yearlyResults.push(calcResultsForYears(z));
    }
    
    function renderResults()
    {
        var sb = [];
              
        sb.push($wr.format('In <strong>{years}</strong> years, college will cost about <strong>{firstYearCost:$}</strong> a year, assuming a <strong>{inflation:%}</strong> college inflation rate.', data));

        sb.push('<table id="results"><tr><th >Years</th><th>Total</th><th>Monthly</th></tr>');
        sb.push('<tr><th >Attending</th><th>Cost</th><th>Savings*</th></tr>');
        
        var template = '<tr><td style="text-align:center;background-color:white;" >{years}</td><td style="text-align:right;background-color:white;">{cost:$}</td><td style="text-align:right;background-color:white;">{payment:$}</td></tr>';
        
        for(var i = 0; i <= yearlyResults.length -1; i++) {
            sb.push($wr.format(template, yearlyResults[i]));
        }
        
        sb.push('</table>');
        
        sb.push('* the amount you have to save every month if you want to pay the total bill.');
        
        resultsDiv.innerHTML = sb.join('');
    }
    
    renderResults();
 
    function renderChart()
    {
        var highestCost = costArray[costArray.length - 1];
        var totalYears = (costArray.length);
        
        var percentages = [];
        //costs.length = totalYears;
        var xlabels = [];
        
        for(var i = 0; i < totalYears; i++) {
            percentages.push((costArray[i]/highestCost) * 100);
            
            if (totalYears > 20) {
                if((i % 2) === 0) {
                    xlabels.push(i);
                }
            }
            else {
                xlabels.push(i); 
            }
        }
        
        var chartData = "t:" + percentages.join();
        
        var chartType = 'bvs';
        var rangeMarker = '';
        if (percentages.length > 10) {
            chartType = 'lc';
            var yearLeftRange = (data.years + 1)/totalYears;
            var yearRightRange = yearLeftRange + .01;
            
            rangeMarker = '&amp;chm=R,ff0000,0,' + yearLeftRange + ',' + yearRightRange;
        }
        
        
        
        var img = '<img src="http://chart.apis.google.com/chart?cht=' +
            chartType + '&amp;chd=' +
            chartData +
            '&amp;chs=400x200&amp;chxt=x,y&amp;chg=0,25,1,0&amp;' +
            'chxl=' +
            
            '0:|' + xlabels.join('|') + '|' +
            '1:|0|' + $wr.toCurrency($wr.roundUp(highestCost/4)) + '|' + 
                    $wr.toCurrency($wr.roundUp(highestCost/2))  + '|' + 
                    $wr.toCurrency($wr.roundUp((highestCost/4) * 3))  + '|' + 
                    $wr.toCurrency($wr.roundUp(highestCost))  + 
            rangeMarker +
            '" alt="college cost chart" />';
        var chartDiv = document.getElementById("chartDiv");
        chartDiv.innerHTML = img;
    }
    
    renderChart();
}