/** typy uveru pro jednotlive pripady, vzdy je to nazev typu, hodnota se bere z indexu
 *  pokud je pouze jeden typ uveru, tak se nevykresluje zadny select
 */
var case1TU = new Array('Hypoteční','Družstevní');
var case2TU = new Array();
var case3TU = new Array();
var case4TU = new Array();
var casesTU = new Array(case1TU,case2TU,case3TU,case4TU);

/** volby fixaci, vzdy pro dany typ uveru **/
var case1F = new Array(new Array('1 rok','3 roky','5 let','10 let','15 let'),new Array('1 rok','3 roky','5 let'));
var case2F = new Array(new Array('1 rok','3 roky', '5 let','10 let','15 let'));
var case3F = new Array(new Array('1 rok','3 roky','5 let'));
var case4F = new Array(new Array('1 rok','3 roky','5 let'));
var casesF = new Array(case1F,case2F,case3F,case4F);

/** procenta jednotlivych pripadu **/
var hypotecniUver = new Array();
  hypotecniUver[0] = new Array(4.24 , 4.24 , 4.24 , 4.95 , 5.25);
  hypotecniUver[1] = new Array(4.24 , 4.24 , 4.24 , 4.95 , 5.25);
  hypotecniUver[2] = new Array(5.34 , 5.30, 5.30 , 5.79 , 5.79);
  
var druzstevniUver = new Array();
  druzstevniUver[0] = new Array(5.44 ,5.49 , 5.49);

var case1 = new Array(hypotecniUver, druzstevniUver);

var buyToLet = new Array();  
  buyToLet[0] = new Array(4.24 , 4.24 , 4.24 , 4.95 , 5.25);
  buyToLet[1] = new Array(4.24 , 4.24 , 4.24 , 4.95 , 5.25);
  buyToLet[2] = new Array(5.34 , 5.30, 5.30 , 5.79 , 5.79);
  
var case2 = new Array(buyToLet);
  
var americkaHypoteka = new Array();
  americkaHypoteka[0] = new Array(6.94 , 6.94 , 6.50, 7.30, 7.30);

var case3 = new Array(americkaHypoteka);

var pripad4 = new Array();
  pripad4[0] = new Array(4.24,4.24,4.24);

var case4 = new Array(pripad4)
  
var cases = new Array(case1,case2,case3,case4);

/** limity pro jednotlive kategorie LVT **/
case1LVT = new Array(new Array(0,70,70,85,85,100),new Array(0,70));
case2LVT = new Array(new Array(0,70,70,85,85,100));
case3LVT = new Array(new Array(0,80));
case4LVT = new Array(new Array(0,100));

casesLVT = new Array(case1LVT,case2LVT,case3LVT,case4LVT);
  
/**
 * Vykresli 
 *
 *
 *
 */      
function renderFixace(pripad,typUveru) {
  var label = document.createElement('label');
  label.innerHTML = 'Fixace úrokové sazby';
  label.htmlFor = 'fixace';
  
  var select = document.createElement('select');
  select.id = 'fixace';
  select.name = 'fixace';
  select.tabIndex = 6;
  for(i=0;i<=casesF[pripad,typUveru].length-1;i++) {
    addNewOption(casesF[pripad][typUveru][i],i,select);
  }
  document.getElementById('fixace_box').appendChild(label);
  document.getElementById('fixace_box').appendChild(select);
}  

/**
 * Funkce zjisti urokovou miru na zaklade toho, o jaky pripad se jedna a podle
 * typu uveru 
 * @param int rozhoduje o tom, zda se jedna o hypoteku na bydleni, pronajem nebo americkou hypoteku nebo dalsi 
 * @param int rozhoduje o tom o jaky typ uveru se jedna, hypotecni, druzstevni nebo jiny, pokud ma dany pripad pouze jeden typ uveru
 *            je hodnota vzdy 0
 * @return float urokova mira  
 */    
function zjistiUrokovouMiru(pripad,typUveru) {
  var hodnoty       = cases[pripad][typUveru];
  var kategorieLVT  = casesLVT[pripad][typUveru];
     
  var fixaceUrok = document.getElementById('fixace').options[document.getElementById('fixace').selectedIndex].value;
  
  if (pripad!=3) {
    var LVT             = lvt(nechatCisla(document.getElementById('cena_nemovitosti').value),
                              nechatCisla(document.getElementById('vyse_pujcky').value));
  } else var LVT = 0;
  
  j=0;                              
  i=0
  while (i<=kategorieLVT.length-1) {
    if (i == kategorieLVT.length-2) kategorieLVT[i+1] = kategorieLVT[i+1]+1; 
    if ((LVT > kategorieLVT[i] && LVT <= kategorieLVT[i+1]) || (LVT == 0))  {var index = j;break;}
    i+=2;
    j++;
  }
  return hodnoty[index][fixaceUrok];
}

function zmenFixaci() {
  var fixaceSelect = document.getElementById('fixace');
  
  for(i=fixaceSelect.options.length-1;i>=0;i--) fixaceSelect.remove(i);
    
  if (document.getElementById('typ_uveru').selectedIndex == 0) {
    addNewOption('1 rok',0,fixaceSelect);
    addNewOption('3 roky',1,fixaceSelect);
    addNewOption('5 let',2,fixaceSelect);
    addNewOption('10 let',3,fixaceSelect);
    addNewOption('15 let',4,fixaceSelect);        
    document.getElementById('uspora-box').style.display = 'block';
  }
  if (document.getElementById('typ_uveru').selectedIndex == 1) {
    addNewOption('1 rok',0,fixaceSelect);
    addNewOption('3 roky',1,fixaceSelect);
    addNewOption('5 let',2,fixaceSelect);
    document.getElementById('uspora-box').style.display = 'none';
  }
}

function addNewOption(text,value,select) {
     var optn = document.createElement("option");
      optn.text = text;
      optn.value = value;
      try {
        select.add(optn);
      } catch (ex) {
        select.add(optn,null);
      }
}

function upravitSplatnost(maximumYears) {
  var splatnost =  document.getElementById('splatnost').value;
  if (splatnost == '') splatnost = 5;
  tempSplatnost = parseInt(splatnost);
  if (tempSplatnost < 5) tempSplatnost=5; else if (tempSplatnost>maximumYears) tempSplatnost = maximumYears;
  document.getElementById('splatnost').value = tempSplatnost;
}

function upravitPomer() {
  var uverCena =  document.getElementById('uver_cena').value;
  tempUverCena = parseInt(uverCena);
  if (tempUverCena < 0) tempUverCena=0; else if (tempUverCena>100) tempUverCena = 100;
  document.getElementById('uver_cena').value = tempUverCena;
}

function dopocitatVysiPujcky() {
  var cenaNemovitosti = nechatCisla(document.getElementById('cena_nemovitosti').value);
  var vlastniZdroje   = nechatCisla(document.getElementById('vlastni_zdroje').value);
  
  var tempVysePujcky = (cenaNemovitosti - vlastniZdroje);
  if (tempVysePujcky < 0) {
    tempVysePujcky = 0;
    tempUverCena   = 0;
  } else {
    var tempUverCena      = tempVysePujcky / cenaNemovitosti * 100;
    if (tempUverCena > 100 || tempUverCena<0) tempUverCena = 0;
  }  
  
  var vysePujcky      = document.getElementById('vyse_pujcky');
  var uverCena        = document.getElementById('uver_cena');
  vysePujcky.value    = penize(tempVysePujcky);
  uverCena.value      = Math.ceil(tempUverCena);
  checkLVT();
}

function dopocitatPodlePomeru() {
  var cenaNemovitosti = nechatCisla(document.getElementById('cena_nemovitosti').value);
  var uverCena        = document.getElementById('uver_cena').value;
  
  if (uverCena < 0 || uverCena > 100) {
    tempVysePujcky    = 0;
    tempVlastniZdroje = 0;  
  } else {
    tempVysePujcky    = cenaNemovitosti * uverCena / 100;
    tempVlastniZdroje = cenaNemovitosti - tempVysePujcky;
  }
  
  if (document.getElementById('vlastni_zdroje')) document.getElementById('vlastni_zdroje').value = penize(tempVlastniZdroje);
  document.getElementById('vyse_pujcky').value    = penize(tempVysePujcky);
  
  /** poresit jestli neni druzstevni a vice nez 70% **/
  return checkLVT();
}

function checkLVT() {
  var uverCena        = document.getElementById('uver_cena').value;
  if (!document.getElementById('typ_uveru')) return;
  if (document.getElementById('typ_uveru').selectedIndex == 1 && uverCena > 70) {
    document.getElementById('uver_cena_error').style.display = 'inline';
    document.getElementById('uver_cena').value = 70;
    document.getElementById('vyse_pujcky').value = penize(nechatCisla(document.getElementById('cena_nemovitosti').value) * 0.7);
    document.getElementById('vlastni_zdroje').value = penize(nechatCisla(document.getElementById('cena_nemovitosti').value) - nechatCisla(document.getElementById('vyse_pujcky').value));
    
    return false;
  } else {
    document.getElementById('uver_cena_error').style.display = 'none';
    return true;
  } 
}

function checkLVTGeneric(max) {
  var cenaNemovitosti = nechatCisla(document.getElementById('cena_nemovitosti').value);
  var vysePujcky      = nechatCisla(document.getElementById('vyse_pujcky').value);
  
  var uverCena = vysePujcky / cenaNemovitosti * 100;
  
  if (uverCena>max) {
    uverCena = max;
    document.getElementById('uver_cena_error').style.display = 'inline';
  } else {
    document.getElementById('uver_cena_error').style.display = 'none';
  }
  
  var vysePujckyNew = penize(cenaNemovitosti * uverCena / 100);
  
  document.getElementById('vyse_pujcky').value = penize(vysePujckyNew);
  document.getElementById('uver_cena').value   = uverCena;
}


function dopocitatVlastniZdroje() {
  var cenaNemovitosti = nechatCisla(document.getElementById('cena_nemovitosti').value);
  var vysePujcky      = nechatCisla(document.getElementById('vyse_pujcky').value);
  
  var tempVlastniZdroje = (cenaNemovitosti - vysePujcky);
  
  if (tempVlastniZdroje <0) {
    if (document.getElementById('vlastni_zdroje')) document.getElementById('vlastni_zdroje').value = '';
    document.getElementById('uver_cena').value  = '';
    document.getElementById('vyse_pujcky_error').style.display = 'inline';
  } else {
    var tempUverCena      = vysePujcky / cenaNemovitosti * 100;
    if (tempUverCena > 100 || tempUverCena<0) tempUverCena = '';
    document.getElementById('uver_cena').value = Math.ceil(tempUverCena);
    
    if (document.getElementById('vlastni_zdroje')) document.getElementById('vlastni_zdroje').value = penize(tempVlastniZdroje);
    document.getElementById('vyse_pujcky_error').style.display = 'none';
  }  
  checkLVT();
}

function aktualizovatPole1() {
  var cenaNemovitosti = nechatCisla(document.getElementById('cena_nemovitosti').value);
  var vysePujcky      = nechatCisla(document.getElementById('vyse_pujcky').value);
  var vlastniZdroje   = nechatCisla(document.getElementById('vlastni_zdroje').value);
  var uverCena        = document.getElementById('uver_cena').value;
  
   
  
}

function filterNumbers(textField) {
  value = textField.value;
  alert(value);
}

function lvt(cenaNemovitosti, vysePujcky) {
  return (vysePujcky / cenaNemovitosti * 100);
}

function compute(pripad,typUveru) {
  if (pripad==0 && typUveru==1) {
    document.getElementById('uspora-box').style.display = 'none';
    if (!dopocitatPodlePomeru()) return;    
  }  
  else {
    if (document.getElementById('uspora-box')) document.getElementById('uspora-box').style.display = 'block';
  }

  var splatnost       = document.getElementById('splatnost').value;

  
   
  var vysePujcky      = nechatCisla(document.getElementById('vyse_pujcky').value);
  
  if (pripad != 3) 
    var cenaNemovitosti = nechatCisla(document.getElementById('cena_nemovitosti').value);    
  else
    var cenaNemovitosti = vysePujcky; // v pripade, ze se jedna o scenar 3 nejsou zadne vlastni zdroje
  
  var LVT             = lvt(cenaNemovitosti,vysePujcky);
  
  var urokovaMira = zjistiUrokovouMiru(pripad, typUveru);
  document.getElementById('sazba').value = urokovaMira.toFixed(2);
  urokovaMira = urokovaMira / 100 / 12;
  
  splatka = (pmt(vysePujcky, urokovaMira, splatnost * 12));
  
  
  document.getElementById('splatka').value = penize(Math.ceil(splatka));
  if (document.getElementById('uspora')) document.getElementById('uspora').value = penize(Math.ceil((splatka * 0.2)));
  
  if (pripad==1) {
    document.getElementById('rocni_splatka').value = penize(splatka * 12); 
    var rocni_naklady = nechatCisla(document.getElementById('udrzba').value)*12;
    document.getElementById('rocni_naklady').value = penize(rocni_naklady); 
    document.getElementById('celkove_rocni_naklady').value = penize((splatka * 12) + rocni_naklady);
    
    var rocniPrijem = nechatCisla(document.getElementById('najem').value)*12;
    //var rocniUsporaDane = nechatCisla(document.getElementById('uspora').value)*12
    document.getElementById('rocni_prijem').value = penize(rocniPrijem); 
    //document.getElementById('rocni_uspora_dane').value = penize(rocniUsporaDane);
    //document.getElementById('celkove_rocni_prijmy').value = penize(rocniPrijem + rocniUsporaDane);
    
    //var vysledek = (rocniPrijem + rocniUsporaDane - (rocni_naklady+(splatka * 12)));
    var vysledek = (rocniPrijem - (rocni_naklady+(splatka * 12)));
    var vysledekCelkem = vysledek*nechatCisla(document.getElementById('plan_pronajmu').value);
    
    if (vysledek<0) {
      vysledek = '- '+penize(vysledek);
      document.getElementById('zisk-rok-kc').style.color = 'red';
    } else {
      vysledek = penize(vysledek)
      document.getElementById('zisk-rok-kc').style.color = 'black';
    }
    document.getElementById('zisk_rok').value = vysledek;    
    
    if (vysledekCelkem < 0) {
      vysledekCelkem = '- ' + penize(vysledekCelkem); 
      document.getElementById('zisk-celkem-kc').style.color = 'red';
    } else {
      vysledekCelkem = penize(vysledekCelkem);
      document.getElementById('zisk-celkem-kc').style.color = 'black';
    }       
    document.getElementById('zisk_cele_obdobi').value = vysledekCelkem;
    
     
  }
  
  if (pripad==3) {
    // zakladni
    if (document.getElementById('bezna_sazba').value=='')
      var technickaHodnota = 0.30;
    else
      var technickaHodnota = (parseFloat(document.getElementById('bezna_sazba').value) - parseFloat(document.getElementById('sazba').value)).toFixed(2);
    document.getElementById('uspora_sazby').value = parseFloat(technickaHodnota).toFixed(2);
    document.getElementById('bezna_sazba').value = (parseFloat(document.getElementById('sazba').value) + parseFloat(document.getElementById('uspora_sazby').value)).toFixed(2);
    var normalniSplatka = (pmt(vysePujcky, document.getElementById('bezna_sazba').value / 100 / 12, splatnost * 12));
    document.getElementById('uspora_splatky').value = penize(Math.ceil(normalniSplatka - nechatCisla(document.getElementById('splatka').value))); 
    // golem vyhody
    document.getElementById('uspora_celkem').value = penize(splatnost * 12 * nechatCisla(document.getElementById('uspora_splatky').value));
    if (vysePujcky <= 500000) 
      document.getElementById('bonus_celkem').value = 'Individuáln?'; 
    else  
      document.getElementById('bonus_celkem').value = penize(1000);
    document.getElementById('vyrizeni').value = 'Zdarma';
    
    var usporaCelkem = splatnost * 12 * nechatCisla(document.getElementById('uspora_splatky').value);
    
    if (document.getElementById('bonus_celkem').value=='Individuální') {
      document.getElementById('uspora_celkem_div').innerHTML = '<h4>Vaše GOLEM úspora celkem '+penize(usporaCelkem)+' Kč.</h4>';
      document.getElementById('uspora_celkem_hidden').value = penize(usporaCelkem);
    }
    else {   
      document.getElementById('uspora_celkem_div').innerHTML = '<h4>Vaše GOLEM úspora celkem '+penize(usporaCelkem+parseInt(nechatCisla(document.getElementById('bonus_celkem').value)))+' Kč.</h4>';
      document.getElementById('uspora_celkem_hidden').value = penize(usporaCelkem+parseInt(nechatCisla(document.getElementById('bonus_celkem').value)));
    }
    
    document.getElementById('prijem').value = penize(minimalniPrijem(vysePujcky,nechatCisla(document.getElementById('splatka').value)));
  }  
}

function ipmt(old, urok) {
  return (old*urok);
}

function renderTable(splatnost,urokovaMira,splatka) {

tabulka = document.getElementById('splatkovy-kalendar');
tabulka.style.display = 'table';
var tempSplatka = nechatCisla(document.getElementById('vyse_pujcky').value);
var tempJistina = 0;

for(i=tabulka.rows.length-1;i>=1;i--) {
  tabulka.deleteRow(i);
}


  for(i=1;i<=splatnost * 12;i++) {
  
    try {
      row = tabulka.insertRow(i);
      if (i%2 == 0) row.style.background='#DFDFFF';
      monthCell = row.insertCell(0);
      monthCell.innerHTML = i;
      
      urokCell = row.insertCell(1);
      var urokZUveru = ipmt(tempSplatka,urokovaMira).toFixed(2);
      var jistina = (splatka - urokZUveru).toFixed(2);
      tempSplatka = tempSplatka - jistina;
      
      urokCell.innerHTML = penize(urokZUveru);
      
      jistinaCell = row.insertCell(2);
      jistinaCell.innerHTML = penize(jistina);
      
      splatkaCell = row.insertCell(3);
      splatkaCell.innerHTML = penize(splatka);
      
      if (tabulka.rows[0].cells.length == 5) {
        usporaCell = row.insertCell(4);
        usporaCell.innerHTML = penize(urokZUveru*0.2.toFixed(2));
      }      
    } catch (e) {}
    
  
  }
}

function kalendar(pripad,typUveru) {
var splatnost = document.getElementById('splatnost').value;
var urokovaMira = zjistiUrokovouMiru(pripad,typUveru);
urokovaMira = urokovaMira / 100 / 12;
splatka = pmt(
            nechatCisla(document.getElementById('vyse_pujcky').value), 
            urokovaMira, 
            splatnost * 12
            ).toFixed(2);
            
renderTable(splatnost,urokovaMira,splatka);
}

function amortizace(sazba, pocetMesicu) {
  var tmp = Math.pow((1 + sazba),pocetMesicu);
  return (sazba * tmp / (tmp - 1));
}

function pmt(vyseUveru, sazba, pocetMesicu) {
  return (amortizace(sazba, pocetMesicu)) * vyseUveru;
}
