var stawki = new Array(
  { stawka: 100, procent: 0, baza: 0},
  { stawka: 100, procent: 0.03, baza: 3000},
  { stawka: 310, procent: 0.02, baza: 10000},
  { stawka: 710, procent: 0.01, baza: 30000},
  { stawka: 1010, procent: 0.004, baza: 60000},
  { stawka: 4770, procent: 0.0020, baza: 1000000}
);

function parseToFloat(str)
{
  str = str.replace('-','');
  str = str.replace(',','.');
  
  var adddot = false
  if( str.length > 0 ) {
    if ( str[str.length-1] == '.' ) {
      adddot = true;
    }
    var float_str = parseFloat(str);
    if( isNaN(float_str) ) {
      str = '';
    } else {
      str = '' + float_str;
      if (adddot)
        str += '.';
    }
  }
  return str;
}

function obliczenia( cena, stawka, typ ) {
  var ret_val = {
    taksa: 0,
    taksa_vat: 0,
    wypisy: 120,
    wieczysta: 200,
    sadowa: 200,
    cyw_praw: 0,
    prowizja: 0,
    prowizja_vat: 0,
    razem: 0
  };
  
  var mnoznik = 1;  
  switch( typ ) {
    case 'spoldzielcze':
      ret_val['wieczysta'] = ret_val['sadowa'] = 0;
      mnoznik = 0.5;
      break;
    case 'spol_ksiega':
      mnoznik = 0.5
      break;
    default:
  }
  
  if (cena != '') {   
    ret_val['cyw_praw'] = Math.round(2*cena)/100;
    ret_val['prowizja'] = Math.round(122*(Math.max(Math.round( stawka *cena)/100, 1500))/100); //! minimalny rozmiar prowizji !!
    
    
    for(i = stawki.length-1; i >= 0; --i) {
      var baza = stawki[i]['baza'];
      if( cena >= baza ) {
        ret_val['taksa'] = Math.round(122*(Math.round( (stawki[i]['stawka'] + stawki[i]['procent']*(cena - baza) )*mnoznik*100)/100)/100);
        break;
      }
    }
  }
  
  var razem = ret_val['taksa'] +
     ret_val['sadowa'] +
     ret_val['prowizja'] +
     ret_val['cyw_praw'] +
     ret_val['wieczysta'] +
     ret_val['wypisy'];
  
  ret_val['razem'] = Math.round(100*razem)/100;
  
  return ret_val;
}

function getCurrencyStr( val ) {
  if ( isNaN(val) ) {
    return '0.00';
  }
  val = Math.round(val*100)/100;
  var str = String(val);
  
  var index = -1;
  if( str.lastIndexOf('.') != -1 ) {
    index = str.length - str.lastIndexOf('.');
  }
  
  switch ( index ) {
    case -1:
      return str + '.00';
    case 2:
      return str + '0';
    default:
      return str;
  }
}

function update() {
  
  var cena_el = document.kalkulator.cena;
  var stawka_el = document.kalkulator.stawka;
  var typ_els = document.kalkulator.typ;
  
  var typ = '';

  
  if (cena_el == null || typ_els == null || stawka_el == null ) 
    return;
  
  var typ = typ_els.value;

  var cena = parseToFloat(cena_el.value);
  cena_el.value = cena;
  var stawka = parseToFloat( stawka_el.value);
  
  if ( stawka > 100.0 ) stawka = 100.0;
  if ( stawka < 0.0 ) stawka = 0.0;
  stawka_el.value = stawka;
  
  var ret = obliczenia( cena, stawka, typ );
  for( i in ret ) {
    var el = document.getElementById(i);
    if (el != null ) {
      el.innerHTML = getCurrencyStr(ret[i]);
    }
  }
}
