google.load('visualization', '1', {packages:['piechart','table']});
var PIECHART = null;
var GOOGLETABLE = null;
var ENERGYLABELCHART = null;

var LOKALITY=[['Benešov','327','-15','3.5','234','3.9','245','0','S','n','2'],['Beroun','229','-15','3.7','225','4.1','236','0','S','z','2'],['Blansko ','273','-15','3.3','229','3.7','241','0','B','n','2'],['Brno','227','-15','3.6','222','4','232','1','B','z','2'],['Bruntál','546','-17','2.7','255','3.3','271','1','T','z','3'],['Břeclav','159','-13','4.1','215','4.4','224','0','B','n','1'],['Česká Lípa','276','-15','3.3','232','3.8','245','0','L','n','2'],['České Budějovice','384','-17','3.4','232','3.8','244','0','C','n','3'],['Český Krumlov','489','-17','3.1','243','3.5','254','1','C','z','3'],['Děčín','141','-15','3.8','225','4.2','236','0','U','n','2'],['Domažlice','428','-17','3.4','235','3.8','247','1','P','z','3'],['Frýdek Místek','300','-15','3.4','225','3.8','236','1','T','z','2'],['Havlíčkův Brod','422','-17','2.8','239','3.3','253','1','J','z','3'],['Hodonín','162','-13','3.9','208','4.2','215','0','B','n','1'],['Hradec Králové','244','-15','3.4','229','3.9','242','0','H','n','2'],['Cheb','448','-17','3','246','3.6','262','0','K','n','3'],['Chomutov','330','-15','307','223','4.1','233','1','U','z','2'],['Chrudim','276','-13','3.6','225','4.1','238','1','E','z','1'],['Jablonec n. Nisou','502','-16','3.1','241','3.6','256','1','L','z','2'],['Jičín','278','-15','3.5','223','3.9','234','0','H','n','2'],['Jihlava','516','-17','3','243','3.5','257','0','J','n','3'],['Jindřichův Hradec','478','-17','3','242','3.5','256','0','C','n','3'],['Karlovy Vary','379','-17','3.3','240','3.8','254','1','K','z','3'],['Karviná','230','-15','3.6','223','4','234','0','T','n','2'],['Kladno','380','-14','4','243','4.5','258','0','S','n','1'],['Klatovy','409','-17','3.4','235','3.9','248','1','P','z','3'],['Kolín','223','-13','4','216','4.4','226','1','S','z','1'],['Kroměříž','207','-15','3.5','217','3.9','227','0','Z','n','2'],['Kutná Hora','253','-13','4','216','4.4','226','1','S','z','1'],['Liberec','357','-15','3.1','241','3.6','256','0','L','n','2'],['Litoměřice','171','-13','3.7','222','4.1','232','1','U','z','1'],['Louny','201','-13','3.7','219','4.1','229','0','U','n','1'],['Mělník','155','-13','3.7','219','4.1','229','0','S','n','1'],['Mladá Boleslav','230','-13','3.5','225','3.9','235','0','S','n','1'],['Most','230','-15','3.7','223','4.1','233','1','U','z','2'],['Náchod','344','-17','3.1','235','3.7','250','0','H','n','3'],['Nový Jičín','284','-15','3.3','229','3.8','242','1','T','z','2'],['Nymburk','186','-13','3.8','217','4.2','228','1','S','z','1'],['Olomouc','226','-15','3.4','221','3.8','231','0','M','n','2'],['Opava','258','-15','3.5','228','3.9','239','0','T','n','2'],['Ostrava','217','-15','3.6','219','4','229','0','T','n','2'],['Pardubice','223','-13','3.7','224','4.1','234','1','E','z','1'],['Pelhřimov','499','-16','3','241','3.6','257','1','J','z','2'],['Písek','348','-17','3.2','235','3.7','247','0','C','n','3'],['Plzeň','311','-15','3.3','233','3.6','242','0','P','n','2'],['Praha','181','-13','4','216','4.3','225','0','A','n','1'],['Prachatice','574','-17','3.3','253','3.8','267','1','C','z','3'],['Prostějov','226','-15','3.4','220','3.8','230','0','M','n','2'],['Přerov','212','-17','3.5','218','3.9','228','0','M','z','3'],['Příbram','502','-16','3','239','3.5','252','0','S','n','2'],['Rakovník','332','-15','3.4','232','4','250','0','S','n','2'],['Rokycany','363','-15','3','239','3.5','252','0','P','n','2'],['Rychnov nad Kněžnou','325','-15','3','241','3.5','254','0','H','n','2'],['Semily','334','-15','2.8','243','3.4','259','1','L','z','2'],['Sokolov','405','-17','3.4','239','3.9','254','1','K','z','3'],['Strakonice','392','-17','3.3','236','3.8','249','1','C','n','3'],['Svitavy','447','-17','2.9','235','3.4','248','0','E','n','3'],['Šumperk','317','-17','3','230','3.5','242','1','M','z','3'],['Tábor','480','-17','3','236','3.5','250','0','C','n','3'],['Tachov','496','-17','3.1','237','3.6','250','0','P','z','3'],['Teplice','205','-15','3.8','221','4.1','230','1','U','z','2'],['Trutnov','428','-19','2.8','242','3.3','257','0','H','n','4'],['Třebíč','406','-17','2.5','247','3.1','263','0','J','n','3'],['Uherské Hradiště','181','-15','3.2','222','3.6','233','1','B','z','2'],['Ústí nad Labem','145','-13','3.6','221','3.9','229','1','U','z','1'],['Ústí nad Orlicí','332','-15','3.1','238','3.6','251','1','E','z','2'],['Vsetín','346','-17','3.2','225','3.6','236','0','Z','n','3'],['Vyškov','245','-15','3.3','219','3.7','229','0','Z','n','2'],['Zlín','234','-15','3.6','216','4','226','0','Z','n','2'],['Znojmo','289','-13','3.6','217','3.9','226','0','B','n','1'],['Žďár nad Sázavou','572','-17','2.4','252','3.1','270','0','J','n','3'],['ZELENÁ ÚSPORÁM','-','-15','5.1','243','-','-','-','-','-','-']];
var TYPY_KCI = [['podlaha1','0.40','0.45 / 0.30'],['strecha1','1.00','0.24 / 0.16'],['strecha2','0.83','&nbsp;'],['okno1','1.15','1.7 / 1.2'],['okno2','1.15','1.7 / 1.2'],['dvere1','1.15','1.7 / 1.2'],['jina1','1.00',''],['jina2','1.00',''],['stena1','1.00','0.38 / 0.25'],['stena2','1.00','0.38 / 0.25']];
var LABEL_POZADAVKY = [0.3,0.6,1.0,1.5,2.0,2.5];

function T_gobj(id){ return document.getElementById(id) }

function r2(x, desMist) {
x = parseFloat(x);
return Math.round(x * Math.pow(10, desMist)) / Math.pow(10, desMist);
}

function nf(x) {
x = parseFloat(x.replace(/,/g, ".").replace(/ /g, ''));
return isNaN(x) ? 0 : x;
}

function showNum(x, hr) {
return (x == Infinity || x == -Infinity || isNaN(x)) ? '-' : (hr ? hr_number(x) : x);
}

function enAb(theObject) {
theObject.disabled = false;
if (theObject.nodeName == 'INPUT' && theObject.type == 'text' || theObject.nodeName == 'SELECT') theObject.style.backgroundColor = '#fff';
}

function disAb(theObject) {
theObject.disabled = true;
if (theObject.nodeName == 'INPUT' && theObject.type == 'text' || theObject.nodeName == 'SELECT') theObject.style.backgroundColor = '#ddd';
}

function itemIndex(r) {
for (var i = 0; i < r.length; i++) { if (r[i].checked == true) {return i} }
return -1;
}

function createSelect(s, p, d) {
s.length = 0;
for (var i = 0; i < p.length; i++) { s[i] = new Option(p[i]); }
s.selectedIndex = d;
}

function htmlShow(obj,displ) {
switch (displ) {
  case 'inline':
    obj.style.display='inline';
    break;
  case 'block':
  default:
    obj.style.display='block';
}
}

function htmlHide(obj) {
obj.style.display='none';
} 

function vypoctiSolarniZisky() {
var obj = T_gobj('fid_solarni_zisk');
if (T_gobj('fid_typ_solarni_zisk_1').checked) {
  disAb(obj);
  var objekt_v = nf(T_gobj('fid_objekt_v').value);
  obj.value = showNum(r2(2.7 * objekt_v, 0));
} else if (T_gobj('fid_typ_solarni_zisk_2').checked) {
  enAb(obj);
}
}

function vypocet() {
  var objekt_te = nf(T_gobj('fid_te').value);
  var objekt_ti = nf(T_gobj('fid_ti').value);
  var delta_t = (objekt_ti - objekt_te)

  var ZTRATY_DATA = [['Obvodový plášť',0,'#FFEC00',0],['Podlaha',0,'#008000',0],['Střecha',0,'#DC3912',0],['Okna, dveře',0,'#9FC2FF',0],['Jiné konstrukce',0,'#EEEEEE',0],['Tepelné mosty',0,'#1A171B',0],['Větrání',0,'#FFFFFF',0]];
  var ht = 0; // merna ztrata prostupem tepla
  var objekt_a = 0;
  for (var i = 0; i < TYPY_KCI.length; i++) {
    kce_u = nf(T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_u').value);
    kce_a = nf(T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_a').value);
    kce_b = nf(T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_b').value);

    kce_h2 = kce_b * kce_u * kce_a; // nezateplena

    if (TYPY_KCI[i][0] == 'okno1' || TYPY_KCI[i][0] == 'okno2' || TYPY_KCI[i][0] == 'jina1' || TYPY_KCI[i][0] == 'jina2' || TYPY_KCI[i][0] == 'dvere1') {
      var u2 = T_gobj('fid_kce_' + (TYPY_KCI[i][0].replace(/2/,'II').replace(/1/,'I')) + '_u').value;
      kce_u2 = (u2 == '') ? kce_u : nf(u2);
    } else {
      kce_u2 = 1 / (1 / kce_u + nf(T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_d').value) / (0.04 * 1000));
    }
    kce_h = kce_b * kce_u2 * kce_a;
    T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_h').innerHTML = showNum(r2(kce_h, 1));

    if (TYPY_KCI[i][0] == 'podlaha1') {
      ZTRATY_DATA[1][1] += kce_h;
      ZTRATY_DATA[1][3] += kce_h2;
    } else if (TYPY_KCI[i][0] == 'strecha1' || TYPY_KCI[i][0] == 'strecha2') {
      ZTRATY_DATA[2][1] += kce_h;
      ZTRATY_DATA[2][3] += kce_h2;
    } else if (TYPY_KCI[i][0] == 'jina1' || TYPY_KCI[i][0] == 'jina2') {
      ZTRATY_DATA[4][1] += kce_h;
      ZTRATY_DATA[4][3] += kce_h2;
    } else if (TYPY_KCI[i][0] == 'stena1' || TYPY_KCI[i][0] == 'stena2') {
      ZTRATY_DATA[0][1] += kce_h;
      ZTRATY_DATA[0][3] += kce_h2;
    } else { // okna, dvere
      ZTRATY_DATA[3][1] += kce_h;
      ZTRATY_DATA[3][3] += kce_h2;
    }
    ht += kce_h;
    objekt_a += kce_a;
  }

  // tepelna ztrata linearnimi mosty
  kce_h = nf(T_gobj('fid_ltm').value) * objekt_a;
  ht += kce_h;
  ZTRATY_DATA[ZTRATY_DATA.length - 2][1] = kce_h;
  ZTRATY_DATA[ZTRATY_DATA.length - 2][3] = kce_h;

  T_gobj('fid_objekt_a').value = objekt_a;
  var objekt_v = nf(T_gobj('fid_objekt_v').value);

  var objekt_av = objekt_a / objekt_v;
  T_gobj('fid_objekt_av').value = r2(objekt_av,2);

  var uem = ht / objekt_a; // prumerny soucinitel prostupu tepla

  // tepelna ztrata vetranim
  var ucinnost_rekuperace = nf(T_gobj('fid_rekuperace').value)
  if (ucinnost_rekuperace && ucinnost_rekuperace > 10) {
    ucinnost_rekuperace -= 10; // snizena ucinnost rekuperace
  }
  var intenzita_vymeny_vzduchu = nf(T_gobj('fid_intenzita_vetrani').value);
  ZTRATY_DATA[ZTRATY_DATA.length - 1][1] = (1 - ucinnost_rekuperace / 100) * 1300 * (intenzita_vymeny_vzduchu * objekt_v / 3600);
  ZTRATY_DATA[ZTRATY_DATA.length - 1][3] = ZTRATY_DATA[ZTRATY_DATA.length - 1][1];

  // vykreslit grafy
  var data = new google.visualization.DataTable();
  var data_table = new google.visualization.DataTable();
  data.addColumn('string', 'Typ konstrukce');
  data.addColumn('number', 'Tepelná ztráta [W]');

  data_table.addColumn('string', 'Typ konstrukce (větrání)');
  data_table.addColumn('number', 'Tepelná ztráta [W]');
  data_table.addRows(ZTRATY_DATA.length + 1);

  var barvy = new Array(); 
  var ztrata = 0; // celkova tepelna ztrata
  var ztrata2 = 0; // celkova tepelna ztrata - nezatepleny objekt
  for (var i = 0; i < ZTRATY_DATA.length; i++) {
    text = ZTRATY_DATA[i][0];
    value = r2(ZTRATY_DATA[i][1] * delta_t, 0);
    ztrata += value;

    value2 = r2(ZTRATY_DATA[i][3] * delta_t, 0);
    ztrata2 += value2;

    barva = ZTRATY_DATA[i][2];

    data_table.setValue(i, 0, text);
    data_table.setValue(i, 1, value);

    if (i < ZTRATY_DATA.length - 1) {
      if (r2(value, 1)) {
        data.addRow([text, value]);
        data.setFormattedValue(barvy.length, 1, value + ' W');
        barvy.push(barva);
      }
    }
  }
  data_table.setValue(ZTRATY_DATA.length, 0, '--- Celkem ---');
  data_table.setValue(ZTRATY_DATA.length, 1, ztrata);

  GOOGLETABLE.draw(data_table, {});
  PIECHART.draw(data, {width: 380, height: 285, is3D: false, legend: 'label', title: 'Tepelné ztráty jednotlivými konstrukcemi',colors: barvy});

  // energeticky stitek
  var uem_n_rq = 0;
  if (objekt_av <= 0.2) {
    uem_n_rq = 1.05;
  } else if (objekt_av >= 1) {
    uem_n_rq = 0.45;
  } else {
    uem_n_rq = 0.3 + 0.15 / objekt_av;
  }
  var uem_n_rc = 0.75 * uem_n_rq;
  var uem_s = 0.6 + uem_n_rq; // prumerny soucinitel prostupu tepla stavebniho fondu

  var ci = 0;
  if (uem <= uem_n_rq) {
    ci = uem / uem_n_rq;
  } else if (uem > uem_n_rq && uem <= uem_s) {
    ci = 1 + (uem - uem_n_rq) / (uem_s - uem_n_rq);
  } else if (uem > uem_s) {
    ci = 1 + uem / uem_s;
  }

  var level = 0;
  for (level = 0; level < LABEL_POZADAVKY.length; level++) {
    if (ci <= LABEL_POZADAVKY[level]) { break; }
  }
  var sublevel = '';
  if (level == 2) {
    if (ci <= 0.75) {
      sublevel = '.1';
    } else {
      sublevel = '.2';
    }
  }
  ENERGYLABELCHART.draw({width: 300, height: 240, legend: 'label', title: 'Energetický štítek obálky budovy', current: level, sublevel: sublevel});

  var tepelny_zisk = nf(T_gobj('fid_tepelny_zisk').value);
  ztrata -= tepelny_zisk;
  ztrata /= 1000; // prevod na kW

  ztrata2 -= tepelny_zisk;
  ztrata2 /= 1000; // prevod na kW

  var tes = nf(T_gobj('fid_lokalita_tes').value);
  var tis = objekt_ti;
  var D = nf(T_gobj('fid_lokalita_d').value) * (tis - tes);
  var epsilon = 0.72;

  var solarni_zisk_mwh = nf(T_gobj('fid_solarni_zisk').value) / 1000;

  var Qvyt_mwh = epsilon * 24 * ztrata * D / (1e3 * (tis - objekt_te)) - solarni_zisk_mwh;
  if (Qvyt_mwh < 0) { Qvyt_mwh = 0; }
  var Qvyt_gj = Qvyt_mwh * 3.6;

  var Qvyt_mwh2 = epsilon * 24 * ztrata2 * D / (1e3 * (tis - objekt_te)) - solarni_zisk_mwh;
  if (Qvyt_mwh2 < 0) { Qvyt_mwh2 = 0; }
  var Qvyt_gj2 = Qvyt_mwh2 * 3.6;

  var objekt_ac = nf(T_gobj('fid_objekt_ac').value);
  var E2_kwh = Qvyt_mwh2 * 1e3 / objekt_ac; // pred
  var E1_kwh = Qvyt_mwh * 1e3 / objekt_ac; // po

  T_gobj('e2_kwh').innerHTML = showNum(r2(E2_kwh, 1));
  T_gobj('e1_kwh').innerHTML = showNum(r2(E1_kwh, 1));
}

function setLocalData() {
  var obj = T_gobj('fid_lokalita');
  T_gobj('fid_te').value = LOKALITY[obj.selectedIndex][2];
  var start_index = 3;
  T_gobj('fid_lokalita_tes').value = LOKALITY[obj.selectedIndex][start_index];
  T_gobj('fid_lokalita_d').value = LOKALITY[obj.selectedIndex][start_index + 1];
}

function showMenu(o) {
  var name = o.id.substring(5, o.id.length);
  var curtain = T_gobj('curtain_' + name);
  o.onclick = function(){return hideMenu(this,curtain)}

  var imgs = curtain.getElementsByTagName('img');
  i = imgs[0];
  i.onclick = function(){return hideMenu(this,curtain)}

  var links = curtain.getElementsByTagName('a');
  for (var i = 0; i < links.length; i++) {
    obj = links[i];
    obj.onclick = function(){return setMenuValue(this,curtain)}
  }
  htmlShow(curtain);
  return false;
}

function hideMenu(obj,c) {
  var name = c.id.substring(8, c.id.length);
  o = T_gobj('menu_' + name);
  o.onclick = function(){return showMenu(this)}
  htmlHide(c);
  return false;
}

function setMenuValue(obj,c) {
  var name = c.id.substring(8, c.id.length);
  T_gobj('fid_kce_' + name + '_u').value = obj.title;
  vypocet();
  return hideMenu(obj,c);
}

function showZU() {
  var x = T_gobj('fid_typ_stavby').selectedIndex;
  var t1 = T_gobj('zelena-usporam-rd');
  var t2 = T_gobj('zelena-usporam-bd');
  var t3 = T_gobj('zelena-usporam-ns');
  if (x == 0) {
    htmlShow(t1);
    htmlHide(t2);
    htmlHide(t3);
  } else if (x == 1) {
    htmlShow(t2);
    htmlHide(t1);
    htmlHide(t3);
  } else if (x == 2) {
    htmlShow(t3);
    htmlHide(t1);
    htmlHide(t2);
  }
}

function reset() {
  // nastavit udalosti na prvky formulare
  var form = T_gobj('content');
  var inputs = form.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) {
    typ = inputs[i].getAttribute('type');
    if (typ == 'radio') {
      inputs[i].onclick = function(){vypocet()}
    } else if (typ == 'text') {
      fid = inputs[i].getAttribute('id');
      if (fid == 'fid_objekt_v') {
        inputs[i].onkeyup = function(){vypoctiSolarniZisky(); vypocet()}
        inputs[i].onchange = function(){vypoctiSolarniZisky(); vypocet()}
      } else {
        inputs[i].onkeyup = function(){vypocet()}
        inputs[i].onchange = function(){vypocet()}
      }
    }
  }

  var data = new Array();
  for (var i = 0; i < LOKALITY.length; i++) {
    data[data.length] = LOKALITY[i][0];
  }
  var obj = T_gobj('fid_lokalita');
  createSelect(obj,data,0);
  obj.onkeyup = function(){setLocalData();vypocet()}
  obj.onchange = function(){setLocalData();vypocet()}
  setLocalData();

  T_gobj('fid_tepelny_zisk').value = '380';

  T_gobj('fid_intenzita_vetrani').value = '0.4';

  obj = T_gobj('fid_rekuperace');
  obj.onkeyup = function(){vypocet()}
  obj.onchange = function(){vypocet()}
  obj.selectedIndex = 0;

  for (var i = 0; i < TYPY_KCI.length; i++) {
    T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_b').value = TYPY_KCI[i][1];
    T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_un').innerHTML = TYPY_KCI[i][2];
    if (TYPY_KCI[i][0] == 'jina1' || TYPY_KCI[i][0] == 'jina2') {
      T_gobj('fid_kce_' + TYPY_KCI[i][0] + '_b').value = TYPY_KCI[i][1];
    }
  }

  T_gobj('fid_ti').value = '20';
  T_gobj('fid_objekt_v').value = '600';

  T_gobj('fid_objekt_ac').value = '162';

  T_gobj('fid_kce_stena1_a').value = '200';
  T_gobj('fid_kce_stena1_u').value = '1.4';

  T_gobj('fid_kce_stena2_a').value = '';

  T_gobj('fid_kce_podlaha1_u').value = '0.4';
  T_gobj('fid_kce_podlaha1_a').value = '100';

  T_gobj('fid_kce_strecha1_u').value = '2.20';
  T_gobj('fid_kce_strecha1_a').value = '100';

  T_gobj('fid_kce_okno1_u').value = '2.35';
  T_gobj('fid_kce_okno1_a').value = '38';

  T_gobj('fid_kce_okno2_u').value = '';
  T_gobj('fid_kce_okno2_a').value = '';

  T_gobj('fid_kce_dvere1_u').value = '3.5';
  T_gobj('fid_kce_dvere1_a').value = '2';

  T_gobj('fid_kce_jina1_u').value = '';
  T_gobj('fid_kce_jina1_a').value = '';

  T_gobj('fid_kce_jina2_u').value = '';
  T_gobj('fid_kce_jina2_a').value = '';

  T_gobj('fid_typ_solarni_zisk_1').checked = true;
  for (var i = 1; i <= 2; i++) {
    obj = T_gobj('fid_typ_solarni_zisk_' + i);
    obj.onclick = function(){vypoctiSolarniZisky(); vypocet()}
  }
  vypoctiSolarniZisky();

  disAb(T_gobj('fid_te'));
  disAb(T_gobj('fid_lokalita_d'));
  disAb(T_gobj('fid_lokalita_tes'));
  disAb(T_gobj('fid_objekt_a'));
  disAb(T_gobj('fid_objekt_av'));

  obj = T_gobj('fid_ltm');
  obj.selectedIndex = 1;
  obj.onkeyup = function(){vypocet()}
  obj.onchange = function(){vypocet()}

  nabidky = ['stena1','stena2','podlaha1','strecha1','strecha2','okno1','okno2','oknoI','oknoII','dvere1','dvereI'];
  for (var i = 0; i < nabidky.length; i++) {
    obj = T_gobj('menu_' + nabidky[i]);
    obj.onclick = function(){return showMenu(this)}
  }

  obj = T_gobj('fid_typ_stavby');
  obj.selectedIndex = 0;
  obj.onkeyup = function(){showZU()}
  obj.onchange = function(){showZU()}

  PIECHART = new google.visualization.PieChart(T_gobj('piechart_div'));
  GOOGLETABLE = new google.visualization.Table(T_gobj('table_div'));
  ENERGYLABELCHART = new EnergyLabel(T_gobj('energylabelchart_div'));
  vypocet();
}
