<b> // Отобразить полученную HTML-строку в элементе,</b>
<b> // ссылка на который была получена выше. </b>
<b> ad.innerHTML = "<ul>" + list + "</ul>";</b>
<b> }</b>
<b> }</b>
<b>}</b>
<b>// График помесячного изменения остатка по кредиту, а также графики сумм,</b>
<b>// выплачиваемых в погашение кредита и по процентам в HTML-элементе <canvas>.</b>
<b>// Если вызывается без аргументов, просто очищает ранее нарисованные графики, </b>
<b>function chart(principal, interest, monthly, payments) {</b>
<b> var graph = document.getElementById("graph"); // Ссылка на тег <canvas></b>
<b> graph.width = graph.width; // Магия очистки элемента canvas</b>
<b> // Если функция вызвана без аргументов или броузер не поддерживает </b>
<b> // элемент <canvas>, то просто вернуть управление, </b>
<b> if (arguments.length == 0 || !graph.getContext) return;</b>
<b> // Получить объект "контекста" для элемента <canvas>,</b>
<b> // который определяет набор методов рисования</b>
<b> var g = graph.getContext("2d"); // Рисование выполняется с помощью этого объекта </b>
<b> var width = graph.width, height = graph.height; // Получить размер холста</b>
<b> // Следующие функции преобразуют количество месячных платежей </b>
<b> // и денежные суммы в пикселы</b>
<b> function paymentToX(n) { return n * width/payments; }</b>
<b> function amountToY(a) { return height-(a*height/(monthly*payments*1.05));} </b>
<b> // Платежи - прямая линия из точки (0,0) в точку (payments,monthly*payments)</b>
<b> g.moveTo(paymentToX(0), amountToY(0)); // Из нижнего левого угла</b>
<b> g.lineTo(paymentToX(payments), // В правый верхний</b>
<b> amountToY(monthly*payments)); </b>
<b> g.lineTo(paymentToX(payments), amountToY(0)); // В правый нижний </b>
<b> g.closePath(); // И обратно в начало </b>
<b> g.fillStyle = "#f88"; // Светло-красный </b>
<b> g.fill(); // Залить треугольник </b>
<b> g.font = "bold 12px sans-serif"; // Определить шрифт </b>
<b> g.fillText("Total Interest Payments", 20,20); // Вывести текст в легенде</b>
<b> // Кривая накопленной суммы погашения кредита не является линейной </b>
<b> // и вывод ее реализуется немного сложнее</b>
<b> var equity = 0;</b>
<b> g.beginPath(); // Новая фигура</b>
<b> g.moveTo(paymentToX(0), amountToY(O)); // из левого нижнего угла</b>
<b> for(var р = 1; р <= payments; р++) {</b>
<b> // Для каждого платежа выяснить долю выплат по процентам</b>
<b> var thisMonthsInterest = (principal-equity)*interest;</b>
<b> equity += (monthly - thisMonthsInterest); // Остаток - погашение кред.</b>
<b> g.lineTo(paymentToX(p),amountToY(equity)); // Линию до этой точки</b>
<b> }</b>
<b> g.lineTo(paymentToX(payments), amountToY(O)); // Линию до оси X</b>
<b> g.closePath(); // И опять в нач. точку </b>
<b> g.fillStyle = "green"; // Зеленый цвет </b>
<b> g.fill(); // Залить обл. под кривой </b>
<b> g.fillText("Total Equity", 20,35); // Надпись зеленым цветом</b>
<b> // Повторить цикл, как выше, но нарисовать график остатка по кредиту</b>
<b> var bal = principal; </b>
<b> g.beginPath();</b>
<b> g.moveTo(paymentToX(O),amountToY(bal)); </b>
<b> for(var p = 1; p <= payments; p++) {</b>
<b> var thisMonthsInterest = bal*interest;</b>
<b> bal -= (monthly - thisMonthsInterest) //Остаток от погаш. по кредиту</b>
<b> g.lineTo(paymentToX(p),amountToY(bal)); // Линию до этой точки</b>
<b> }</b>
<b> g.LineWidth = 3; //Жирная линия</b>
<b> g.stroke; //Нарисовать кривую графика </b>
<b> g.fillStle="black"; //Черный цвет для текста </b>
<b> g.fillText("Loan Balabce", 20, 50); //Элемент легенды</b>