//
//   работаем только с браузерами поддерживающими DOM или IE4
//
var DOM = (document.getElementById) ? true : false; 
var chIE4 = (document.all && document.all.item) ? true : false;
var IE4 = (chIE4 && !DOM) ? true : false;

function currencyFormat_int(fld, e, length)   // onKeyPress="return(currencyFormat_int(this,event,length))"
{
  var ch = '';	
  var strCheck = '0123456789';
  if(IE4) { 
  	 if(window.event.keyCode > 0) ch=String.fromCharCode(window.event.keyCode);     
  } else {       
      if(e.keyCode>0) ch=String.fromCharCode(e.keyCode);
      else if(e.charCode>0) 
      ch=String.fromCharCode(e.charCode);         
  }    
  
  if( strCheck.indexOf(ch) == -1 ) return false;  // Not a valid key
  if( fld.value.charAt(0) == '0' ) { fld.value = fld.value.substr(1); }
  if( fld.value.length < length ) {  fld.value += ch;  }
  return false;
}

// Round all passed numbers to two
// decimal places (hundredths place)
function round(number,decPlace) {
 decPlace = (!decPlace ? 2 : decPlace);
 return Math.round(number * Math.pow(10,decPlace)) / Math.pow(10,decPlace);
}


function roundMoney(number) {	
  number = number.toString();
  if( number.indexOf('.') != -1 ) {	
      var sum = number.split(/\./)
      var part1 = sum[0]
      var part2 = sum[1]
      if( part2 != undefined ) {
         if( part2.length > 2 ) {
  	        if( Number(part2.charAt(2)) > 0 )  {  	 	
                return round(Number(part1 + '.' + part2.substr(0, 2)) + 0.01)	 
  	        } else {
      	        return part1 + '.' + part2.substr(0, 2); 
            }	   		
         } 
   	     return part1 + '.' + part2; 
      }   
  } 
  return round(number);     
}


function getObject(obj) {
   var Obj;
   if (typeof obj != "object") {
        if (DOM) {       Obj = document.getElementById(obj);  } 
        else if (IE4) {  Obj = document.all[obj];        }
   } else if (obj) {     Obj = obj;  }
   return Obj;
}

// decimal places
var decimalPlace = 6; 

//Cols
var arrCols = new Array (new Array(12, 120), new Array (120, 240), new Array(240, 360));
var arrRows = new Array (new Array(30, 50), new Array (50, 70), new Array(70, 90));
var arrPerc = new Array (new Array(10.75, 12.0, 13.5), new Array(11.0, 12.25, 13.75), new Array(11.25, 12.5, 14.0))

//платеж не более % от дохода заемщика
var ShareIncome = 50.0

var arrFVal = new Array (new Array("ppay","cost","income","year"), new Array("kz","percent","incomeperc","apay"));

function currencyFormat_int(fld, e, length)   // onKeyPress="return(currencyFormat_int(this,event,length))"
{
  var ch = '';	
  var strCheck = '0123456789';
  if(IE4) { 
  	 if(window.event.keyCode > 0) ch=String.fromCharCode(window.event.keyCode);     
  } else {       
      if(e.keyCode>0) ch=String.fromCharCode(e.keyCode);
      else if(e.charCode>0) 
      ch=String.fromCharCode(e.charCode);         
  }    
  
  if( strCheck.indexOf(ch) == -1 ) return false;  // Not a valid key
  if( fld.value.charAt(0) == '0' ) { fld.value = fld.value.substr(1); }
  if( fld.value.length < length ) {  fld.value += ch;  }
  return false;
}

// Round all passed numbers to two
// decimal places (hundredths place)
function round(number,decPlace) {
 decPlace = (!decPlace ? 2 : decPlace);
 return Math.round(number * Math.pow(10,decPlace)) / Math.pow(10,decPlace);
}

function roundMoney(number) {	
  number = number.toString();
  if( number.indexOf('.') != -1 ) {	
      var sum = number.split(/\./)
      var part1 = sum[0]
      var part2 = sum[1]
      if( part2 != undefined ) {
         if( part2.length > 2 ) {
  	        if( Number(part2.charAt(2)) > 0 )  {  	 	
                return round(Number(part1 + '.' + part2.substr(0, 2)) + 0.01)	 
  	        } else {
      	        return part1 + '.' + part2.substr(0, 2); 
            }	   		
         } 
   	     return part1 + '.' + part2; 
      }   
  } 
  return round(number);     
}

function getObject(obj) {
   var Obj;
   if (typeof obj != "object") {
        if (DOM) {       Obj = document.getElementById(obj);  } 
        else if (IE4) {  Obj = document.all[obj];        }
   } else if (obj) {     Obj = obj;  }
   return Obj;
}

function clearF(dat, idx) {
    if( idx == undefined ) {	
  	    for( var i=0; i<arrFVal.length; i++) 
  	       for( var k=0; k<arrFVal[i].length; k++) 
  	          dat[arrFVal[i][k]].value=''
    } else {
	    for( var i=0; i<arrFVal[idx].length; i++) dat[arrFVal[idx][i]].value=''
    }    
    clearD()
}

function clearD() {  obj = getObject("text");  obj.innerHTML = "";  }

function viewD(mess)  {  obj = getObject("text");  obj.innerHTML = mess; }		

function Cols(c, arr) {
    var ret = -1;
	for( var i = 0; i<arr.length; i++) {
		if(!i) {
		   if( (c >= arr[i][0]) && (c <= arr[i][1]) ) { ret=i; break;  }
		}  else  {
		   if( (c > arr[i][0]) && (c <= arr[i][1]) ) {  ret=i; break;  }		
		}   
	}
	return ret;
}

function calc(dat) {	    
    var ppay = parseInt(dat.ppay.value)
    var cost = parseInt(dat.cost.value) 
    var income = parseInt(dat.income.value) 
    var year = parseInt(dat.year.value) 
    var percent = 0
    var emess = ""
    
    clearF(dat, 1)
    
    if( isNaN(ppay) || isNaN(cost) || isNaN(income) || isNaN(year) ) {
      viewD("Неправильный ввод данных!")
      return false
    }  
    
    var month = year*12
    var credit = cost-ppay
    
    if( month < arrCols[0][0] || month > arrCols[arrCols.length-1][1] ) {
       viewD("Срок кредита должен быть от "+ arrCols[0][0] +" до "+ arrCols[arrCols.length-1][1] +" месяцев.")
       return false
    } 
    
    var KZ = round(((cost-ppay)/cost)*100, decimalPlace)
    			
	var col1 = Cols(month, arrCols)		
	var col2 = Cols(KZ, arrRows)
	if( col2 < 0 ) {
      viewD("Недопустимая разница между суммой кредита и первоначальным взносом.")
      return false		
	}
	
	percent = arrPerc[col1][col2]
	
	var mpercent = round(percent/12/100, decimalPlace)	
    var apay = credit * ( mpercent / (1-Math.pow((1+mpercent),(-(month-2)))))
	var incomeperc = roundMoney((apay/income)*100)

	if( incomeperc > ShareIncome ) {
      viewD("Платеж по требуемому кредиту превышает разрешенное значение доли Ваших доходов.")
      return false		
	}		
			
	dat.kz.value=roundMoney(KZ)
	dat.percent.value=percent
	dat.apay.value=roundMoney(apay)
	dat.incomeperc.value=incomeperc
}
