/** CONSTANTS */

const JERARQUIA_ESTUDIS = {
  "FP": ["PFI", "IFE", "CFPB", "CFPM", "CFPS", "CEFP"],
  "EA": ["CFAM", "CFAS", "MUSL48.3", "MUSL", "DANL48.3", "DANL", "ESCM", "ESCS", "ESDL"],
  "EA_APD": ["CFAM", "CFAS"],
  "EA_MUS": ["MUSL48.3", "MUSL"],
  "EA_DAN": ["DANL48.3", "DANL"],
  "EA_ESC": ["ESCM", "ESCS"],
  "EA_EAS": ["ESDL"],
  "TE": ["TEGM", "TEGS"]
}

const TITOL_SUBPAGINA = {
  "FP": "Oferta d'Ensenyaments de Formació Professional",
  "EA": "Oferta d'Ensenyaments Artístics",
  "EA_APD": "Oferta d'Ensenyaments d'Arts Plàstiques i Disseny",
  "EA_MUS": "Oferta d'Ensenyaments de Música",
  "EA_DAN": "Oferta d'Ensenyaments de Dansa",
  "EA_ESC": "Oferta d'Ensenyaments d'Arts Escèniques",
  "EA_EAS": "Oferta d'Ensenyaments Artístics Superiors",
  "TE": "Oferta d'Ensenyaments Esportius"
}

const DICCIONARI_ESTUDIS = {
  "FP":   {"nom": "Formació Professional"},
  "EA":   {"nom": "Artístics"},
  "TE":   {"nom": "Esportius"},	
  "FA":   {"nom": "Formació d'Adults"},
  "ID":   {"nom": "Idiomes"},
  "AC":   {"nom": "Cursos per Accedir a Cicles"},
  "CP":   {"nom": "Certificats de Professionalitat"},
  "PFI":  {"nom": "Programes de Formació i Inserció"},
  "IFE":  {"nom": "Itineraris Formatius Específics"},
  "CFPB": {"nom": "Cicles Formatius de Grau Bàsic"},
  "CFPM": {"nom": "Cicles Formatius de Grau Mitjà"},
  "CFPS": {"nom": "Cicles Formatius de Grau Superior"},
  "CEFP": {"nom": "Cursos d'Especialitzcació"},
  "APD":  {"nom": "Arts Plàstiques i Disseny"},
  "ESC":  {"nom": "Arts Escèniques"},
  "MUSL48.3": {"nom": "Ensenyaments a les escoles de música"},
  "MUSL": {"nom": "Ensenyaments professionals de Música"},
  "DANL48.3": {"nom": "Ensenyaments a les escoles de dansa"},
  "DANL": {"nom": "Ensenyaments professionals de Dansa"},
  "ESDL":  {"nom": "Ensenyaments Artístics Superiors"},
  "CFAM": {"nom": "Grau Mitjà"},
  "CFAS": {"nom": "Grau Superior"},
  "ESCM": {"nom": "Grau Mitjà"},
  "ESCS": {"nom": "Grau Superior"},
  "TEGM": {"nom": "Grau Mitjà"},
  "TEGS": {"nom": "Grau Superior"},
  "AAAA": {"nom": "Cursos d'Accés a Cicles"}
}

/** PARAMETRES */

let ANY_OFERTA = getAnyOferta();
let CATEGORIA_ESTUDIS = getSubetapa();
let codisFamilies = getCodisFamilies(CATEGORIA_ESTUDIS);

/** CODI PRINCIPAL */

function getSubetapa(){
  let resultat = null;
  let urlParamsHandler = new URLSearchParams(document.location.search);
  let codiSubetapa = String(urlParamsHandler.get("subetapa")).toUpperCase();
  if(Object.keys(JERARQUIA_ESTUDIS).includes(codiSubetapa)){
    resultat = codiSubetapa;
  }else{
    //resultat = "FP";
    resultat = "";
  }
  return resultat;
}

function enrereButtonClickEventHandler(event){

  document.getElementById("stlleida-requadre-families").style.display = "";
  document.getElementById("stlleida-requadre-ensenyaments-nav").style.display = "none";
  
  let requadreEnsenyamentsNavNomFamilia = document.getElementById("stlleida-nav-nom-familia");
  
  while (requadreEnsenyamentsNavNomFamilia.hasChildNodes()){
    requadreEnsenyamentsNavNomFamilia.removeChild(requadreEnsenyamentsNavNomFamilia.childNodes[0]);
  }
  
  let requadreEnsenyaments = document.getElementById("stlleida-requadre-ensenyaments");
  requadreEnsenyaments.display = "none";
  
  while (requadreEnsenyaments.hasChildNodes()){
    requadreEnsenyaments.removeChild(requadreEnsenyaments.childNodes[0]);
  }
  
  history.back();

}

function familiaDivClickEventHandler(event){

  let codiFamilia = this.id.substring(this.id.length - 2, this.id.length);
  
  document.getElementById("stlleida-requadre-families").style.display = "none";
  document.getElementById("stlleida-requadre-ensenyaments").style.display = "";
  document.getElementById("stlleida-requadre-ensenyaments-nav").style.display = "";
  document.getElementById("stlleida-nav-nom-familia").appendChild(
  document.createTextNode(DICCIONARI_FAMILIES[codiFamilia].nom));
  
  carregaVistaEnsenyamentsFamilia(codiFamilia, CATEGORIA_ESTUDIS);

  history.pushState({"codiFamilia": codiFamilia}, "Detalls família "+codiFamilia, "");

}



const DICCIONARI_FAMILIES = getDiccionariFamilies(CATEGORIA_ESTUDIS);


let DICCIONARI_CENTRES = getDadesCentres();
let DICCIONARI_DUAL = getEnsenyamentsDual();

function Ensenyament(codi, nom, componentsCodi){
  this.codi = codi;
  this.nom = nom;
  this.codiEstudis = componentsCodi.codiEstudis;
  this.codiCategoriaEstudis = componentsCodi.codiCategoriaEstudis;
  this.codiEnsenyamentEnEstudis = componentsCodi.codiEnsenyamentEnEstudis;
  this.codiTematica = componentsCodi.codiTematica;
  this.oferta = [];
  this.descriptors = [];
}

Ensenyament.prototype.toHTMLTableRow = function(){
  
  let htmlRow = document.createElement("tr");
  let thisElement = this;
  
  ["codi", "nom"].forEach(function(atribut){
    let tdElement = document.createElement("td");
    let textContent = thisElement[atribut];
    tdElement.appendChild(document.createTextNode(textContent))
    tdElement.classList.add("stlleida-item-"+atribut);
    htmlRow.appendChild(tdElement);
  });
  
  let llistatCentresTdElement = document.createElement("td");
  llistatCentresTdElement.classList.add("stlleida-item-oferta");
  
  let llistatCentresUlElement = document.createElement("ul");
  
  let llistatCentres = this.oferta.sort(function(a, b){
    result = -1;
    if(DICCIONARI_CENTRES[a.codiCentre].nom.toLowerCase() < DICCIONARI_CENTRES[b.codiCentre].nom.toLowerCase()){
      result = 1;
    }
    return result;
  });
  
  llistatCentres.forEach(function(ofertaCentre){
    let liElement = document.createElement("li");
    let centre = DICCIONARI_CENTRES[ofertaCentre.codiCentre];
    liElement.appendChild(
      document.createTextNode(centre.nom + " (" + centre.nomMunicipi + ")")
    );
    
    if(ofertaCentre.descriptors.indexOf("pendentDeProgramar")!= -1){
      let iconaProvisional = document.createElement("i");
      iconaProvisional.classList.add("material-icons-two-tone");
      iconaProvisional.classList.add("stlleida-icona-pendent-programar");
      iconaProvisional.appendChild(
        document.createTextNode("watch_later")
      );
      liElement.appendChild(iconaProvisional);
    }
    
    if(ofertaCentre.descriptors.indexOf("novetat")!= -1){
      var iconaNovetat = document.createElement("i");
      iconaNovetat.classList.add("stlleida-icona-novetat");
      iconaNovetat.appendChild(
        document.createTextNode(" - nou")
      );
      liElement.appendChild(iconaNovetat);
    }
    
    if(ofertaCentre.descriptors.indexOf("dual")!= -1){
      var iconaDual = document.createElement("i");
      iconaDual.classList.add("stlleida-icona-dual");
      iconaDual.appendChild(
        document.createTextNode(" - dual")
      );
      liElement.appendChild(iconaDual);
    }
    
    llistatCentresUlElement.appendChild(liElement);

  });

  llistatCentresTdElement.appendChild(llistatCentresUlElement);
  
  htmlRow.appendChild(llistatCentresTdElement);
  
  let fitxaPdfTd = document.createElement("td");
  fitxaPdfTd.classList.add("stlleida-item-fitxa");
  let fitxaPdfA = document.createElement("a");
  let nomFitxer = this.codi.replace(/\s/g, "_") + "_CA.pdf";
  fitxaPdfA.href = "https://www.gencat.cat/ensenyament/eac/pdf/" + nomFitxer;
  fitxaPdfA.download = nomFitxer;
  fitxaPdfA.type = "application/octet-stream";
  fitxaPdfA.target = "_blank";
  fitxaPdfA.rel = "attachment";
  let fitxaPdfAIcona = document.createElement("i");
  fitxaPdfAIcona.classList.add("material-icons-two-tone");
  fitxaPdfAIcona.appendChild(document.createTextNode("description"));
  fitxaPdfA.appendChild(fitxaPdfAIcona);
  fitxaPdfTd.appendChild(fitxaPdfA);
  htmlRow.appendChild(fitxaPdfTd);

  return htmlRow;

};

function extreureCategoriaEstudis(codiEstudis){
  let resultat = null;
  let categories = Object.getOwnPropertyNames(JERARQUIA_ESTUDIS);
  idx = 0;
  found = false;
  while(!found && idx<categories.length){
    if(JERARQUIA_ESTUDIS[categories[idx]].indexOf(codiEstudis)!=-1){
      found = true;
      resultat = categories[idx];
    }
    idx++;
  }
  return resultat;
}

function extreureTematica(codiEnsenyamentEnEstudis){
  return codiEnsenyamentEnEstudis.substring(0, 2);
}

function processarComponentsCodiEnsenyament(codiEnsenyament){
  
  let resultat = {}
  let componentsCodi = String(codiEnsenyament).replace(/\s+/g, ' ').trim().split(" ");
  
  if (componentsCodi.length < 2) {
    var novesComponentsCodi = [];
    novesComponentsCodi.push(componentsCodi[0].substring(0, 8));
    novesComponentsCodi.push(componentsCodi[0].substring(8, codiEnsenyament.length));
    componentsCodi = novesComponentsCodi;
  }
  
  resultat.codiEstudis = componentsCodi[0];
  resultat.codiCategoriaEstudis = extreureCategoriaEstudis(resultat.codiEstudis);
  resultat.codiEnsenyamentEnEstudis = componentsCodi[1];
  resultat.codiTematica = extreureTematica(resultat.codiEnsenyamentEnEstudis);
  
  return resultat;

}
        
function processarOfertaEnsenyamentsPerCentres(ofertaEnsenyamentsPerCentre){

  let ensenyaments = {};
  
  Object.getOwnPropertyNames(ofertaEnsenyamentsPerCentre).forEach(codiCentre => {
    
    if(codiCentre!="llistatCodis"){
    
      ofertaEnsenyamentsPerCentre[codiCentre].ofertes.forEach(oferta => {
      
        let componentsCodiEnsenyament = processarComponentsCodiEnsenyament(oferta.codiEnsenyament);
      
        if(componentsCodiEnsenyament.codiCategoriaEstudis){
        
          let inserirOferta = false;
          let pendentDeProgramar = false;
          let novetat = false;
      
          if(oferta.ofertaEnsenyament.length > 1){
            inserirOferta = true;
          }else{
            if(oferta.ofertaEnsenyament[0].curs == String(ANY_OFERTA)){
              inserirOferta = true;
              novetat = true;
            }else{
              if(oferta.anyActivacioOferta == String(ANY_OFERTA - 1)){
                inserirOferta = true;
                pendentDeProgramar = true;
              }
            }

          }
        
          if(inserirOferta){
          
            let ensenyament;
          
            if(ensenyaments[oferta.codiEnsenyament]){
              ensenyament = ensenyaments[oferta.codiEnsenyament];
            }else{
            
              ensenyament = new Ensenyament(
                oferta.codiEnsenyament,
                oferta.nomEnsenyament,
                componentsCodiEnsenyament
              );

             ensenyaments[oferta.codiEnsenyament] = ensenyament;

            }
            
            let descriptors = [];
          
            if(novetat){
              descriptors.push("novetat");
            }
          
            if(pendentDeProgramar){
              descriptors.push("pendentDeProgramar");
            }
            
            if(DICCIONARI_DUAL[codiCentre]){
              if(DICCIONARI_DUAL[codiCentre].indexOf(oferta.codiEnsenyament.replace(/\s+/g, ' '))!=-1){
                descriptors.push("dual");
              }
            }
      
            ensenyament.oferta.push({
              "codiCentre": codiCentre, 
              "descriptors": descriptors
            });
        
          }
        
        }
      
      });
    
    }
  
  });
  
  return ensenyaments;

}
 

function filtrarDiccionari(diccionari, filtre){
  
  let resultat = {};
  
  Object.entries(diccionari).forEach(entrada => {
    
    let entradaAcceptada = true;
    let condicions = Object.entries(filtre);
    let idx = 0;
    
    while (entradaAcceptada && idx < condicions.length){
      
      let condicio = condicions[idx];
      let trobat = false;
      
      condicio[1].forEach(valor => {
        if(entrada[1][condicio[0]].toLowerCase().includes(valor.toLowerCase())){
          trobat = true;
        }
      });

      if(!trobat){
        entradaAcceptada = false;
      }

      idx++;
    
    }
    
    if(entradaAcceptada){
      resultat[entrada[0]] = entrada[1];
    }

  });

  return resultat;

}
        
function diccionariALlistatOrdenat(diccionari, atributOrdenacio){
  
  if(diccionari){
    
    let llistatEntrades = Object.entries(diccionari);
    let funcioOrdenacio;
    
    if(atributOrdenacio){
      
      funcioOrdenacio = function(element1, element2){
        let resultat = -1;
        
        if(element1[1][atributOrdenacio].toLowerCase() > element2[1][atributOrdenacio].toLowerCase()){
          resultat = 1;
        }
        
        return resultat;
      
      }
    
    }else{

      funcioOrdenacio = function(element1, element2){
        
        let resultat = -1;
        
        if(element1[0].toLowerCase() > element2[0].toLowerCase()){
          resultat = 1;
        }
        
        return resultat;
    
      }
    
    }
            
    return llistatEntrades.sort(funcioOrdenacio);
          
  }else{
            
    return [];
          
  }
        
}
        
function crearVistaHTMLEnsenyamentsFP(ensenyaments, codiCategoriaEstudis){
  
  let vistaHTMLEnsenyamentsFP = document.createElement("div");
  let vistesEstudisHTML = {};
  
  vistaHTMLEnsenyamentsFP.id = "vista-ensenyaments-categoria";
  
  JERARQUIA_ESTUDIS[CATEGORIA_ESTUDIS].forEach(codiEstudis => {
    
    let estudisDiv = document.createElement("table");
    estudisDiv.id = vistaHTMLEnsenyamentsFP.id + "-" + codiEstudis;
    estudisDiv.classList.add("vista-ensenyaments-estudis");
    let estudisDivCaption = document.createElement("caption");
    estudisDivCaption.classList.add("nom-estudis");
    estudisDivCaption.appendChild(document.createTextNode(DICCIONARI_ESTUDIS[codiEstudis].nom));
    estudisDiv.appendChild(estudisDivCaption);
    let estudisDivThead = document.createElement("thead");
    let trElement = document.createElement("tr");
    let codiThElement = document.createElement("th");
    codiThElement.classList.add("stlleida-item-codi");
    codiThElement.appendChild(document.createTextNode("Codi"));
    let nomThElement = document.createElement("th");
    nomThElement.classList.add("stlleida-item-nom");
    nomThElement.appendChild(document.createTextNode("Nom"));
    let ofertaThElement = document.createElement("th");
    ofertaThElement.classList.add("stlleida-item-oferta");
    ofertaThElement.appendChild(document.createTextNode("Centres"));
    let fitxaThElement = document.createElement("th");
    fitxaThElement.classList.add("stlleida-item-fitxa");
    fitxaThElement.appendChild(document.createTextNode("Fitxa"));
    trElement.appendChild(codiThElement);
    trElement.appendChild(nomThElement);
    trElement.appendChild(ofertaThElement);
    trElement.appendChild(fitxaThElement);
    estudisDivThead.appendChild(trElement);
    estudisDiv.appendChild(estudisDivThead);
    let estudisDivRelacioEnsenyaments = document.createElement("tbody");
    estudisDivRelacioEnsenyaments.classList.add("vista-ensenyaments");
    estudisDiv.appendChild(estudisDivRelacioEnsenyaments);
    vistesEstudisHTML[codiEstudis] = estudisDivRelacioEnsenyaments;
    vistaHTMLEnsenyamentsFP.appendChild(estudisDiv);
  });

  diccionariALlistatOrdenat(ensenyaments, "nom").forEach(ensenyament => {

    let codiCategoriaEstudis = CATEGORIA_ESTUDIS.slice(0,2);
    
    if(ensenyament[1].codiCategoriaEstudis==codiCategoriaEstudis){
      vistesEstudisHTML[ensenyament[1].codiEstudis].appendChild(ensenyament[1].toHTMLTableRow());
    }

  });

  JERARQUIA_ESTUDIS[CATEGORIA_ESTUDIS].forEach(function(codiEstudis){
    
    if(!vistesEstudisHTML[codiEstudis].hasChildNodes()){
      let trElement = document.createElement("tr");
      trElement.classList.add("stlleida-sense-oferta");
      let tdElement = document.createElement("td");
      tdElement.colSpan = "4";
      tdElement.appendChild(document.createTextNode("Actualment no hi ha oferta d'aquests ensenyaments als Serveis Territorials de Lleida"));
      trElement.appendChild(tdElement);
      vistesEstudisHTML[codiEstudis].appendChild(trElement);
    }

  });

  return vistaHTMLEnsenyamentsFP;

}
      
function carregaVistaEnsenyamentsFamilia(codiFamilia, codiCategoriaEstudis = "FP"){
  
  let ofertaPerCentres = getOfertaPerCentres();
  let ensenyaments = processarOfertaEnsenyamentsPerCentres(ofertaPerCentres);
  let ensenyamentsFiltrats;
  ensenyamentsFiltrats = filtrarDiccionari(ensenyaments, {codiCategoriaEstudis: [codiCategoriaEstudis.slice(0,2)]});
  ensenyamentsFiltrats = filtrarDiccionari(ensenyamentsFiltrats, {codiTematica: [codiFamilia]});
  document.getElementById("stlleida-requadre-ensenyaments").appendChild(
    crearVistaHTMLEnsenyamentsFP(ensenyamentsFiltrats)
  );

}

function getCodisFamilies(codiCategoriaEstudis = "FP"){
  let resultat = null;
  switch(codiCategoriaEstudis){
    case "FP":
      resultat = ["AE","AG","AR","AF","CM","EO","EE","EA","FM","FS","HT","IS","IP","IA","IE","IC","IM","QU","SA","SM","SC","TX","TM"];
      break;
    case "EA_APD":
      resultat = ["CE","CG","58","EC","57"];
      break;
    case "TE":
      resultat = ["AT","BA","SQ","80","81","ES","ME","82","83","EQ","CO","PI","SS","NA"];
      break; 
    default:
      resultat = [];
  }
  return resultat;
}

function getDiccionariFamilies(codiCategoriaEstudis = "FP"){
  let resultat = null;
  switch(codiCategoriaEstudis){
    case "FP":
      resultat = {   
        "AE": {nom: "Activitats físiques i esportives", icona: "hiking"},
        "AG": {nom: "Administració i gestió", icona:"account_balance"},
        "AR": {nom: "Agrària", icona:"agriculture"},
        "AF": {nom: "Arts gràfiques", icona:"insights"},
        "CM": {nom: "Comerç i màrqueting", icona:"campaign"},
        "EO": {nom: "Edificació i obra civil", icona:"maps_home_work"},
        "EE": {nom: "Electricitat i electrònica", icona:"electrical_services"},
        "EA": {nom: "Energia i aigua", icona:"light_mode"},
        "FM": {nom: "Fabricació mecànica", icona:"engineering"},
        "FS": {nom: "Fusta, moble i suro", icona:"carpenter"},
        "HT": {nom: "Hoteleria i turisme", icona:"food_bank"},
        "IP": {nom: "Imatge personal", icona:"face_retouching_natural"},
        "IS": {nom: "Imatge i so", icona:"linked_camera"},
        "IA": {nom: "Indústries alimentàries", icona:"dinner_dining"},
        "IE": {nom: "Indústries extractives", icona:"play_for_work"},
        "IC": {nom: "Informàtica i comunicacions", icona:"devices"},
        "IM": {nom: "Instal·lació i manteniment", icona:"handyman"},
        "QU": {nom: "Química", icona:"science"},
        "SA": {nom: "Sanitat", icona:"local_hospital"},
        "SM": {nom: "Seguretat i medi ambient", icona:"park"},
        "SC": {nom: "Serveis socioculturals i a la comunitat", icona:"people"},
        "TX": {nom: "Tèxtil, confecció i pell", icona:"checkroom"},
        "TM": {nom: "Transport i manteniment de vehicles", icona:"car_repair"}
      };
      break;
    case "EA_APD":
      resultat = {   
        "CE": {nom: "Ceràmica artística"},
        "CG": {nom: "Comunicació gràfica i audiovisual"},
        "58": {nom: "Disseny d'interiors"},
        "EC": {nom: "Escultura"},
        "57": {nom: "Arts aplicades al mur"}
      };
      break;
    case "TE":
      resultat = {
        "AT": {nom: "Atletisme"},
        "BA": {nom: "Basquetbol"},
        "SQ": {nom: "Busseig esportiu"},
        "80": {nom: "Esports d'hivern"},
        "81": {nom: "Esports de muntanya i escalada"},
        "ES": {nom: "Esgrima"},
        "ME": {nom: "Espeleologia"},
        "82": {nom: "Futbol i futbolsala"},
        "83": {nom: "Handbol"},
        "EQ": {nom: "Hípica"},
        "CO": {nom: "Judo i defensa personal"},
        "PI": {nom: "Piragüisme"},
        "SS": {nom: "Salvament i socorrisme"},
        "NA": {nom: "Vela"}
      };
      break;
    default:
      resultat = {};
  }
  return resultat;
}

function crearVistaHTMLEnsenyaments(ensenyaments, codiCategoriaEstudis){
  
  let vistaHTMLEnsenyaments = document.createElement("div");
  let vistesEstudisHTML = {};
  vistaHTMLEnsenyaments.id = "vista-ensenyaments-categoria";

  JERARQUIA_ESTUDIS[codiCategoriaEstudis].forEach(codiEstudis => {
    let estudisDiv = document.createElement("table");
    estudisDiv.id = vistaHTMLEnsenyaments.id + "-" + codiEstudis;
    estudisDiv.classList.add("vista-ensenyaments-estudis");
    let estudisDivCaption = document.createElement("caption");
    estudisDivCaption.classList.add("nom-estudis");
    estudisDivCaption.appendChild(document.createTextNode(DICCIONARI_ESTUDIS[codiEstudis].nom));
    estudisDiv.appendChild(estudisDivCaption);
    let estudisDivThead = document.createElement("thead");
    let trElement = document.createElement("tr");
    let codiThElement = document.createElement("th");
    codiThElement.classList.add("stlleida-item-codi");
    codiThElement.appendChild(document.createTextNode("Codi"));
    let nomThElement = document.createElement("th");
    nomThElement.classList.add("stlleida-item-nom");
    nomThElement.appendChild(document.createTextNode("Nom"));
    let ofertaThElement = document.createElement("th");
    ofertaThElement.classList.add("stlleida-item-oferta");
    ofertaThElement.appendChild(document.createTextNode("Centres"));
    let fitxaThElement = document.createElement("th");
    fitxaThElement.classList.add("stlleida-item-fitxa");
    fitxaThElement.appendChild(document.createTextNode("Fitxa"));
    trElement.appendChild(codiThElement);
    trElement.appendChild(nomThElement);
    trElement.appendChild(ofertaThElement);
    trElement.appendChild(fitxaThElement);
    estudisDivThead.appendChild(trElement);
    estudisDiv.appendChild(estudisDivThead);
    let estudisDivRelacioEnsenyaments = document.createElement("tbody");
    estudisDivRelacioEnsenyaments.classList.add("vista-ensenyaments");
    estudisDiv.appendChild(estudisDivRelacioEnsenyaments);
    vistesEstudisHTML[codiEstudis] = estudisDivRelacioEnsenyaments;
    vistaHTMLEnsenyaments.appendChild(estudisDiv);
  });

  let auxCodiCategoriaEstudis = codiCategoriaEstudis.slice(0,2);
  
  diccionariALlistatOrdenat(ensenyaments, "nom").forEach(ensenyament => {
    if(ensenyament[1].codiCategoriaEstudis==auxCodiCategoriaEstudis && JERARQUIA_ESTUDIS[codiCategoriaEstudis].includes(ensenyament[1].codiEstudis)){
      vistesEstudisHTML[ensenyament[1].codiEstudis].appendChild(ensenyament[1].toHTMLTableRow());
    }
  });

  JERARQUIA_ESTUDIS[codiCategoriaEstudis].forEach(codiEstudis => {
    if(!vistesEstudisHTML[codiEstudis].hasChildNodes()){
      let trElement = document.createElement("tr");
      trElement.classList.add("stlleida-sense-oferta");
      let tdElement = document.createElement("td");
      tdElement.colSpan = "4";
      tdElement.appendChild(document.createTextNode("Actualment no hi ha oferta d'aquests ensenyaments als Serveis Territorials de Lleida"));
      trElement.appendChild(tdElement);
      vistesEstudisHTML[codiEstudis].appendChild(trElement);
    }
  });

  return vistaHTMLEnsenyaments;

}


function onLoadHandler(){
  let itemCount = 0;
  let gridDiv;

  if(CATEGORIA_ESTUDIS !== ""){
    document.getElementById("stlleida-ofertaeducativa").style.display = "none";
    document.getElementById("stlleida-contents").style.display = "block";
    document.getElementById("stlleida-titol-subpagina").innerText = TITOL_SUBPAGINA[CATEGORIA_ESTUDIS];
  }

  let stlleidaRequadreFamilies = document.getElementById("stlleida-requadre-families");

  if(codisFamilies.length > 0){
    codisFamilies.forEach(codiFamilia => {
    
      if(itemCount % 3 == 0){
        gridDiv = document.createElement("div");
        gridDiv.classList.add("row");
        stlleidaRequadreFamilies.appendChild(gridDiv);
      }
    
      let familiaDiv = document.createElement("div");
      familiaDiv.classList.add("requadre-familia");
      let familiaDivNom = document.createElement("div");
      familiaDivNom.classList.add("nom-familia");
      familiaDivNom.appendChild(document.createTextNode(DICCIONARI_FAMILIES[codiFamilia].nom));
      let familiaDivLogo = document.createElement("div");
      familiaDivLogo.classList.add("logo-familia");
      let familiaDivLogoImg = document.createElement("i");
      familiaDivLogoImg.classList.add("material-icons-two-tone");
      familiaDivLogoImg.appendChild(document.createTextNode(DICCIONARI_FAMILIES[codiFamilia].icona));
      familiaDivLogo.appendChild(familiaDivLogoImg);
      familiaDiv.appendChild(familiaDivLogo);
      familiaDiv.appendChild(familiaDivNom);
      familiaDiv.id = "stlleida-fp-familia-"+codiFamilia;
      familiaDiv.addEventListener("click", familiaDivClickEventHandler);
      gridDiv.appendChild(familiaDiv);
      itemCount = itemCount + 1;
    
    });
  }else{

    let ofertaPerCentres = getOfertaPerCentres();
    let ensenyaments = processarOfertaEnsenyamentsPerCentres(ofertaPerCentres);
    document.getElementById("stlleida-requadre-families").appendChild(
      crearVistaHTMLEnsenyaments(ensenyaments, CATEGORIA_ESTUDIS)
    );

  }
}

window.addEventListener("load", onLoadHandler);
window.addEventListener("popstate", function(){location.reload();});
document.getElementById("stlleida-nav-enrere").addEventListener("click", enrereButtonClickEventHandler);