
var vat = .18;
var leasing_rate = .28;

 var jsData = new Array();
   /*
  function fM(value){
  	 return Math.round(value*100)/100;
  }
   */

function isNumber(val)
{
    if (isNaN(val))
    {
        return false;
    }
    else
    {
        return true;
    }
}

function isWithinRange(val, min, max){
    if (val >= min && val <= max) {
        return true;
    }
    else {
        return false;
    }
}

function fM(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ' ' + '$2');
    }
    return x1 + x2;
}

function removeChildNodes(ctrl)
{
  while (ctrl.childNodes[0])
  {
    ctrl.removeChild(ctrl.childNodes[0]);
  }
}


 function calculate(){

    jsData = [];
    var cfg = getInitialValues();
	if (!cfg.isOk()){
	   return;
	}

 	//var item_cost = document.getElementById('item_cost_value').value;
 	//var advans_payment_value = document.getElementById('advans_payment_value').value;
	//var leasing_term_value = document.getElementById('leasing_term_value').value;
	//var redemption_value = document.getElementById('redemption_value').value;

	var item_cost_without_vat = cfg.is_vat ? Math.round(cfg.item_cost / 118 * 100) : cfg.item_cost;

	var advans_payment_value = cfg.advans_payment_percent * cfg.item_cost;
	var redemption_value = cfg.redemption_percent * cfg.item_cost;
	var redemption_value_without_vat = (cfg.redemption_percent * item_cost_without_vat);


    var r0_redemption_vat_value = ( cfg.item_cost *  cfg.advans_payment_percent);
	var r0_redemption_novat_value = (item_cost_without_vat *  cfg.advans_payment_percent);
	var r0_leasing_payment_vat = (r0_redemption_novat_value * cfg.vat);
    var r0_leasing_payment  = r0_redemption_novat_value + r0_leasing_payment_vat;

	jsData[0] = { date_of_payment: 'Авансовый платеж',
	              redemption_vat : Math.round(r0_redemption_vat_value),
	              redemption_novat : Math.round(r0_redemption_novat_value),
				  leesing_fee: 0,
				  payment_without_vat: Math.round(r0_redemption_novat_value),
				  leasing_payment_vat : Math.round(r0_leasing_payment_vat),
				  leasing_payment: Math.round(r0_leasing_payment)
	};


	var redemption_vat_sum = r0_redemption_vat_value;
	var redemption_novat_sum = r0_redemption_novat_value;
	var leesing_fee_sum = 0;
	var payment_without_vat_sum = r0_redemption_novat_value;
	var leasing_payment_vat_sum = r0_leasing_payment_vat;
	var leasing_payment_sum = r0_leasing_payment;

    var r_redemption_vat_value = ((cfg.item_cost - advans_payment_value - redemption_value) / cfg.leasing_term_value );
	var r_redemption_novat_value = ((item_cost_without_vat - redemption_value_without_vat - r0_redemption_novat_value) / cfg.leasing_term_value );

	//var r_redemption_value = ((item_cost_without_vat - redemption_value_without_vat - r0_redemption_value) / 12 );

	for(var i = 1; i <= cfg.leasing_term_value; i++){

		var r_leasing_fee = Math.round( (cfg.item_cost - redemption_vat_sum) * cfg.leasing_rate / 360 * 30);
		var r_payment_without_vat = r_redemption_novat_value + r_leasing_fee;
		var r_leasing_payment_vat = cfg.vat * r_payment_without_vat;
		var r_leasing_payment = r_payment_without_vat + r_leasing_payment_vat;


		jsData[i] = {date_of_payment: i + '-й месяц',
					 redemption_vat : Math.round(r_redemption_vat_value),
					 redemption_novat : Math.round(r_redemption_novat_value),
		             leesing_fee : r_leasing_fee,
					 payment_without_vat: Math.round(r_payment_without_vat),
					 leasing_payment_vat: Math.round(r_leasing_payment_vat),
					 leasing_payment: Math.round(r_leasing_payment)
		            };
		/*
		redemption_sum += jsData[i].redemption;
		leesing_fee_sum += jsData[i].leesing_fee;
		payment_without_vat_sum += jsData[i].payment_without_vat;
		leasing_payment_vat_sum += jsData[i].leasing_payment_vat;
		leasing_payment_sum += jsData[i].leasing_payment;
		*/
		redemption_vat_sum += r_redemption_vat_value;
        redemption_novat_sum += r_redemption_novat_value;
        leesing_fee_sum += r_leasing_fee;
        payment_without_vat_sum += r_payment_without_vat;
        leasing_payment_vat_sum += r_leasing_payment_vat;
        leasing_payment_sum += r_leasing_payment;
	}

    jsData.push({ date_of_payment: 'Выкупная стоимость:',
                  redemption_vat : "",
				  redemption_novat : "",
                  leesing_fee: "",
                  payment_without_vat: "",
                  leasing_payment_vat : "",
                  leasing_payment: ""
    });

	r_leasing_payment_vat = cfg.vat * redemption_value_without_vat;
    r_leasing_payment = redemption_value_without_vat + r_leasing_payment_vat;

    jsData.push({ date_of_payment: --i + '-й месяц',
	              redemption_vat:   Math.round(redemption_value),
                  redemption_novat: Math.round(redemption_value_without_vat),
                  leesing_fee: "",
                  payment_without_vat: Math.round(redemption_value_without_vat),
                  leasing_payment_vat: Math.round(r_leasing_payment_vat),
                  leasing_payment: Math.round(r_leasing_payment)
    });

	i = jsData.length - 1;
	redemption_vat_sum += redemption_value;
    redemption_novat_sum += redemption_value_without_vat;
    //leesing_fee_sum += jsData[i].leesing_fee;
    payment_without_vat_sum += redemption_value_without_vat;
    leasing_payment_vat_sum += r_leasing_payment_vat;
    leasing_payment_sum += r_leasing_payment;
	/*
    redemption_sum += jsData[i].redemption;
    leesing_fee_sum += jsData[i].leesing_fee;
    payment_without_vat_sum += jsData[i].payment_without_vat;
    leasing_payment_vat_sum += jsData[i].leasing_payment_vat;
    leasing_payment_sum += jsData[i].leasing_payment;
    */
    jsData.push({ date_of_payment: 'ИТОГО:',
                  redemption_vat : Math.round(redemption_vat_sum),
				  redemption_novat : Math.round(redemption_novat_sum),
                  leesing_fee: Math.round(leesing_fee_sum),
                  payment_without_vat: Math.round(payment_without_vat_sum),
                  leasing_payment_vat : Math.round(leasing_payment_vat_sum),
                  leasing_payment: Math.round(leasing_payment_sum)
    });

	 //var tbody = document.getElementById('leasing_table_data');
	 drawTable('leasing_table_data');
}

function vatOn(){
	var vat_vars = document.getElementsByName('is_vat');
    var is_vat;
    for (i = 0; i < vat_vars.length; i++)
    {
        if (vat_vars[i].checked == true) {
            is_vat = vat_vars[i].value > 0;
            break;
        }
    }
	return is_vat;
}

function getInitialValues(){
    //var configData = Array();

	return {
		redemption_value_input: document.getElementById('redemption_value'),
		leasing_term_input: document.getElementById('leasing_term_value'),
		advans_payment_input:  document.getElementById('advans_payment_percent'),
		item_cost_input : document.getElementById('item_cost_value'),
		leasing_term_value: document.getElementById('leasing_term_value').value,
		redemption_percent: document.getElementById('redemption_value').value / 100,
		item_cost : document.getElementById('item_cost_value').value,
		advans_payment_percent: document.getElementById('advans_payment_percent').value / 100,
		vat: vat,
		is_vat: vatOn(),
		leasing_rate: document.getElementById('leasing_rate_percent').value / 100,
		isOk: function(){
			var ok = true;


			if ( isNumber(this.redemption_value_input.value) && isWithinRange(this.redemption_value_input.value, 1,25) ){

                this.redemption_value_input.className = "option_input";
				document.getElementById('redemption_error').innerHTML = "";
			}else{
				ok = false;
				this.redemption_value_input.className = "option_error_input";
				document.getElementById('redemption_error').innerHTML = "Only numeric values from 1 to 25 are valid";
			}

			if (isNumber(this.leasing_term_input.value) && this.leasing_term_input.value >= 12 && this.leasing_term_input.value <= 120) {
                this.leasing_term_input.className = "option_input";
                document.getElementById('leasing_term_error').innerHTML = "";
            }else{
                ok = false;
                this.leasing_term_input.className = "option_error_input";
                document.getElementById('leasing_term_error').innerHTML = "Only numeric values from 12 to 120 are valid";
            }

            if (isNumber(this.advans_payment_input.value) && this.advans_payment_input.value >= 0 && this.advans_payment_input.value <= 50) {
                this.advans_payment_input.className = "option_input";
                document.getElementById('advans_payment_error').innerHTML = "";
            }else{
                ok = false;
                this.advans_payment_input.className = "option_error_input";
                document.getElementById('advans_payment_error').innerHTML = "Only numeric values from 0 to 50 are valid";
            }

            if (isNumber(this.item_cost_input.value) && this.item_cost_input.value > 0) {
                this.item_cost_input.className = "option_input";
                document.getElementById('item_cost_error').innerHTML = "";
            }else{
                ok = false;
                this.item_cost_input.className = "option_error_input";
                document.getElementById('item_cost_error').innerHTML = "Only natural values are valid";
            }

            var leasing_rate_percent = document.getElementById('leasing_rate_percent');
            if (isNumber(leasing_rate_percent.value) && leasing_rate_percent.value > 0) {
                leasing_rate_percent.className = "option_input";
                document.getElementById('leasing_rate_error').innerHTML = "";
            }else{
                ok = false;
                leasing_rate_percent.className = "option_error_input";
                document.getElementById('leasing_rate_error').innerHTML = "Only natural values are valid";
            }

			return ok;
		}
	}

}

function addRow(tbody, row){



}

function drawTable(tbody) {
    var tr, td;
    tbody = document.getElementById(tbody);
	//tbody.innerHTML = "";
	removeChildNodes(tbody);




    for (var i = 0; i < jsData.length; i++) {

		tr = tbody.insertRow(tbody.rows.length);

        if ( i == (jsData.length -1 )) {
          tr.className = "important_cell";
        }

        td = tr.insertCell(tr.cells.length);
        td.setAttribute("align", "left");
		td.className = "name_cell";
        td.innerHTML = fM(jsData[i].date_of_payment);

        td = tr.insertCell(tr.cells.length);
        td.innerHTML = fM(jsData[i].redemption_vat);

        td = tr.insertCell(tr.cells.length);
        td.innerHTML = fM(jsData[i].redemption_novat);

        td = tr.insertCell(tr.cells.length);
        td.innerHTML = fM(jsData[i].leesing_fee);

        td = tr.insertCell(tr.cells.length);
        td.innerHTML = fM(jsData[i].payment_without_vat);

		td = tr.insertCell(tr.cells.length);
        //td.setAttribute("align", "center");
        td.innerHTML = fM(jsData[i].leasing_payment_vat);

        td = tr.insertCell(tr.cells.length);
		td.className = "important_cell";
        td.innerHTML = fM(jsData[i].leasing_payment);
    }
}




function BuildTable(myArray,numcells) {
  var arrLength = myArray.length; //the number of values
  var numrows; //number of rows
  if( arrLength / numcells > Math.floor(arrLength / numcells) )
       numrows= Math.floor(arrLength / numcells) + 1;
  else
       numrows= Math.floor(arrLength / numcells) ;

//generate the table
 var myTable = '<TABLE>';
  var arrIdx = 0;
for (var i = 0; i < numrows; i++)
{
   myTable += "<TR>";
   for (var j = 0; j < numcells; j++)
   {
      myTable += "<TD>";
      if(arrIdx <= arrLength)  myTable += myArray[arrIdx];
      arrIdx++;
    }
   myTable += "</TR>";
}
myTable += "</TABLE>";
 return myTable
}


