/* <Objektu pro praci s tydennim kalendarem>  */
function KalendarTydenni (den,mesic,rok)
{
  this.den = den;
  this.mesic = mesic;
  this.rok = rok;
  this.prefixIdPrvku = '';
  
  this.ziskejTydenniKalendar = function (aktualniDatum,udajeVybranehoData,prefixIdPrvku)
  {
    this.prefixIdPrvku = prefixIdPrvku;
    var predchoziMesic = this.ziskejTydenniUdajePredchozihoMesice ();
    var aktualniMesic = this.ziskejTydenniUdajeAktualnihoMesice ();
    var nasledujiciMesic = this.ziskejTydenniUdajeNasledujiciMesice (); 
    var poleTydnu = this.ziskejPoleTydnu (predchoziMesic,aktualniMesic,nasledujiciMesic);
    
    for (i=0;i<7;i++)
    {
      var idPrvku = "kalendar" + prefixIdPrvku + "Tyden" + i;
      if (prefixIdPrvku != '')
      {
        var obsah = "<span>";
      }
      else
      {
        var obsah = "<span class=\"klikatelnyText\" onclick=\"ziskejZmenuVybranehoDne ('" + idPrvku + "','" +
            poleTydnu[i]['pondeliDen'] + "." + poleTydnu[i]['pondeliMesic'] + "." + poleTydnu[i]['pondeliRok'] + "');\">";
      }
      
      document.getElementById(idPrvku).innerHTML = obsah + poleTydnu[i]['pondeliDen'] + ". " + poleTydnu[i]['pondeliMesic'] + ". " + poleTydnu[i]['pondeliRok'] + "</span>";
      var idPrvku = "kalendar" + prefixIdPrvku + "Tyden" + i + "Ne";
      document.getElementById(idPrvku).innerHTML = obsah + poleTydnu[i]['nedeleDen'] + ". " + poleTydnu[i]['nedeleMesic'] + ". " + poleTydnu[i]['nedeleRok'] + "</span>";
    }
    
    if(predchoziMesic['rok']>2001)
    {
      var obsah = "<span class=\"klikatelnyText\" onclick=\"ziskejTydenniKalendar ('" +
      poleTydnu[2]['pondeliDen'] + "','" + poleTydnu[2]['pondeliMesic'] + "','" + poleTydnu[2]['pondeliRok'] + "','" + prefixIdPrvku + "');\">&Lambda;</span>";
      document.getElementById("prepinac" + prefixIdPrvku + "PredchoziTyden").innerHTML = obsah;
    }
    
    if(predchoziMesic['rok']<2099)
    {
      var obsah = "<span class=\"klikatelnyText\" onclick=\"ziskejTydenniKalendar ('" +
      poleTydnu[4]['pondeliDen'] + "','" + poleTydnu[4]['pondeliMesic'] + "','" + poleTydnu[4]['pondeliRok'] + "','" + prefixIdPrvku + "');\">V</span>";
      document.getElementById("prepinac" + prefixIdPrvku + "NasledujiciTyden").innerHTML = obsah;
    }
 
    this.oznacVybraneDatum (poleTydnu,udajeVybranehoData); 
  } 

  this.ziskejTydenniUdajePredchozihoMesice = function ()
  {
    var predchoziMesic = this.mesic - 1;
    var predchoziRok = this.rok;
    
    if (predchoziMesic == 0)
    {
      predchoziMesic = 12;
      predchoziRok = this.rok - 1;
    }
    
    return this.ziskejTydenniUdajeMesice (predchoziMesic,predchoziRok);
  }
  
  this.ziskejTydenniUdajeNasledujiciMesice = function ()
  {
    var nasledujiciMesic = this.mesic*1 + 1;
    var nasledujiciRok = this.rok;
    
    if (nasledujiciMesic == 13)
    {
      nasledujiciMesic = 1;
      nasledujiciRok = this.rok*1 + 1;
    }
    
    return this.ziskejTydenniUdajeMesice (nasledujiciMesic,nasledujiciRok);
  }

  this.ziskejTydenniUdajeAktualnihoMesice = function ()
  {
    return this.ziskejTydenniUdajeMesice (this.mesic,this.rok);
  }

  this.ziskejTydenniUdajeMesice = function (mesic,rok)
  {
    var udaje = new Array ();
    
    udaje['pocetDni'] = ziskejPocetDniMesice (mesic,rok);
    var prvniDen = ziskejPrvniDenMesice (mesic,rok);
    
    if (prvniDen > 1)
    {
      udaje['prvniPondeli'] = 9 - prvniDen;
    }
    else
    {
      udaje['prvniPondeli'] = 1;
    }
    
    udaje['mesic'] = mesic;
    udaje['rok'] = rok;
    
    return udaje;
  }
  
  this.ziskejPoleTydnu = function (predchoziMesic,aktualniMesic,nasledujiciMesic)
  {
    var celkemDni = predchoziMesic['pocetDni']*1 + aktualniMesic['pocetDni']*1 + 28;
    var poleTydnu = new Array ();
    var cislaTydnu = 0;
    
    var pondeliDen = predchoziMesic['prvniPondeli']*1;
    var mesic = predchoziMesic['mesic']*1;
    var rok = predchoziMesic['rok']*1;
    var nedeleDen = predchoziMesic['prvniPondeli']*1 + 6;
    var pocetDni = predchoziMesic['pocetDni']*1;
    
    for (i = predchoziMesic['prvniPondeli'];i<=celkemDni;i+=7)
    {
      if (pondeliDen > pocetDni && mesic == predchoziMesic['mesic'])
      {
        var pondeliDen = aktualniMesic['prvniPondeli']*1;
        var nedeleDen = aktualniMesic['prvniPondeli']*1 + 6;
        var mesic = aktualniMesic['mesic']*1;
        var rok = aktualniMesic['rok']*1;
        var pocetDni = aktualniMesic['pocetDni']*1;
      }
      else if (pondeliDen > pocetDni)
      {
        var pondeliDen = nasledujiciMesic['prvniPondeli']*1;
        var nedeleDen = nasledujiciMesic['prvniPondeli']*1 + 6;
        var mesic = nasledujiciMesic['mesic']*1;
        var rok = nasledujiciMesic['rok']*1;
        var pocetDni = nasledujiciMesic['pocetDni']*1;
      }
      
      var aktuTyden = new Array ();
      aktuTyden['pondeliDen'] = pondeliDen;
      aktuTyden['pondeliMesic'] = mesic;
      aktuTyden['pondeliRok'] = rok;
      aktuTyden['nedeleDen'] = nedeleDen;
      aktuTyden['nedeleMesic'] = mesic;
      aktuTyden['nedeleRok'] = rok;
      
      if(aktuTyden['nedeleDen'] > pocetDni && mesic == predchoziMesic['mesic'])
      {
        aktuTyden['nedeleDen'] = nedeleDen - pocetDni;
        aktuTyden['nedeleMesic'] = aktualniMesic['mesic']*1;
        aktuTyden['nedeleRok'] = aktualniMesic['rok']*1;
      }
      else if(aktuTyden['nedeleDen'] > pocetDni)
      {
        aktuTyden['nedeleDen'] = nedeleDen - pocetDni;
        aktuTyden['nedeleMesic'] = nasledujiciMesic['mesic']*1;
        aktuTyden['nedeleRok'] = nasledujiciMesic['rok']*1;
      }
      
      poleTydnu[cislaTydnu] = aktuTyden;
      cislaTydnu += 1;
      pondeliDen += 7;
      nedeleDen += 7;
    }
 
    return this.ziskejVybranePoleTydnu (poleTydnu,aktualniMesic);
  }
  
  this.ziskejVybranePoleTydnu = function (poleTydnu,aktualniMesic)
  { // Vybere 7 tydnu tak, aby 4tyden obsahoval vybrany den.
    var cisloVybraneho = 4;
    var posledniPondeli = aktualniMesic['prvniPondeli']*1 + 28;
    
    if(posledniPondeli > aktualniMesic['pocetDni'])
    {
      posledniPondeli -= 7;
    }
    
    if(this.den < aktualniMesic['prvniPondeli'] && aktualniMesic['prvniPondeli'] > 1)
    {
      var den = aktualniMesic['prvniPondeli'] - 1;
    }
    else if(this.den > posledniPondeli)
    {
      var den = posledniPondeli;
    }
    else
    {
      var den = this.den;
    }
       
    
    for (i=0;i<poleTydnu.length;i++)
    {
      //alert (den + ";" + this.mesic + ";" + this.rok + "-" + poleTydnu[i]['pondeliDen'] + ";" + poleTydnu[i]['pondeliMesic'] + ";" + poleTydnu[i]['pondeliRok']);     
      if (poleTydnu[i]['pondeliDen'] == den &&  poleTydnu[i]['pondeliMesic']==this.mesic && this.rok == poleTydnu[i]['pondeliRok'])
      {
        cisloVybraneho = i;
        break;
      }
       
      if (poleTydnu[i]['nedeleDen'] == den && poleTydnu[i]['nedeleMesic']== this.mesic && this.rok == poleTydnu[i]['nedeleRok'])
      { 
        cisloVybraneho = i;
        break;
      } 
        
      if (den > poleTydnu[i]['pondeliDen'] && den < poleTydnu[i]['nedeleDen'] && poleTydnu[i]['pondeliMesic'] == this.mesic && den >= 7)
      {  // prostredek a konce mesice
        cisloVybraneho = i;
        break;
      }
        
      if (den > poleTydnu[i]['pondeliDen'] && den < poleTydnu[i]['nedeleDen'] && poleTydnu[i]['nedeleMesic'] == this.mesic && den < 7)
      { // prostredek a zacatek mesice
        cisloVybraneho = i;
        break;
      } 
    }
    
    var prvniTyden = cisloVybraneho - 3;
    var druhyTyden = cisloVybraneho - 2;
    var tretiTyden = cisloVybraneho - 1;
    var ctvrtyTyden = cisloVybraneho;
    var patyTyden = cisloVybraneho*1 + 1;
    var sestyTyden = cisloVybraneho*1 + 2;
    var sedmiTyden = cisloVybraneho*1 + 3;
    
    var poleVybranychTydnu = new Array ();
    poleVybranychTydnu[0] = poleTydnu[prvniTyden];
    poleVybranychTydnu[1] = poleTydnu[druhyTyden];
    poleVybranychTydnu[2] = poleTydnu[tretiTyden];
    poleVybranychTydnu[3] = poleTydnu[ctvrtyTyden];
    poleVybranychTydnu[4] = poleTydnu[patyTyden];
    poleVybranychTydnu[5] = poleTydnu[sestyTyden];
    poleVybranychTydnu[6] = poleTydnu[sedmiTyden]; 
    
    return poleVybranychTydnu;    
  }
  
  this.oznacVybraneDatum = function (poleTydnu,udajeVybranehoData)
  { // Zrusime vyber predchozi
    var bunky = document.getElementsByTagName("td");
    
    for (i=0;i<bunky.length;i++)
    {
      var tridaCSS = bunky[i].className;
      tridaCSS = tridaCSS.replace(" vybrany", "");
      bunky[i].className = tridaCSS;
    }
    
    if(udajeVybranehoData['rok'] < poleTydnu[0]['pondeliRok'])
    {
      return false;
    }
    
    if(udajeVybranehoData['rok'] > poleTydnu[6]['nedeleRok'])
    {
      return false;
    }
    
    var meziMesic = poleTydnu[0]['pondeliMesic']*1 + 1;
    
    if (meziMesic == 13)
    {
      meziMesic = 1;
    }
    
    if(
    udajeVybranehoData['mesic'] != poleTydnu[0]['pondeliMesic']
    &&
    udajeVybranehoData['mesic'] != meziMesic
    &&
    udajeVybranehoData['mesic'] != poleTydnu[6]['nedeleMesic'])
    {
      return false;
    }

    var vybranyMesic = this.ziskejTydenniUdajeMesice (udajeVybranehoData['mesic'],udajeVybranehoData['rok']);
    var posledniPondeli = vybranyMesic['prvniPondeli']*1 + 28;
    
    if(posledniPondeli > vybranyMesic['pocetDni'])
    {
      posledniPondeli -= 7;
    }
    
    if(udajeVybranehoData['den'] < vybranyMesic['prvniPondeli'] && vybranyMesic['prvniPondeli'] > 1)
    {
      var den = vybranyMesic['prvniPondeli'] - 1;
    }
    else if(udajeVybranehoData['den'] > posledniPondeli)
    {
      var den = posledniPondeli;
    }
    else
    {
      var den = udajeVybranehoData['den'];
    }    
    var cisloVybraneho = -1;
    
    for (i=0;i<poleTydnu.length;i++)
    {      
      if (poleTydnu[i]['pondeliDen'] == den &&  poleTydnu[i]['pondeliMesic']==udajeVybranehoData['mesic'] && udajeVybranehoData['rok'] == poleTydnu[i]['pondeliRok'])
      {
        cisloVybraneho = i;
        break;
      }
        
      if (poleTydnu[i]['nedeleDen'] == den && poleTydnu[i]['nedeleMesic']== udajeVybranehoData['mesic'] && udajeVybranehoData['rok'] == poleTydnu[i]['nedeleRok'])
      {
        cisloVybraneho = i;
        break;
      }
        
      if (den > poleTydnu[i]['pondeliDen'] && den < poleTydnu[i]['nedeleDen'] && poleTydnu[i]['pondeliMesic'] == udajeVybranehoData['mesic'] && den >= 7)
      {  // prostredek a konce mesice
        cisloVybraneho = i;
        break;
      }
        
      if (den > poleTydnu[i]['pondeliDen'] && den < poleTydnu[i]['nedeleDen'] && poleTydnu[i]['nedeleMesic'] == udajeVybranehoData['mesic'] && den < 7)
      { // prostredek a zacatek mesice
        cisloVybraneho = i;
        break;
      }  
    }

    if (cisloVybraneho == -1)
    {
      return false;
    }
    
    var idVybraneho = "kalendar" + this.prefixIdPrvku + "Tyden" + cisloVybraneho;
    var vybraneDatum = udajeVybranehoData['den'] + ". " + udajeVybranehoData['mesic'] + ". " + udajeVybranehoData['rok'];
    ziskejZmenuVybranehoDne (idVybraneho,vybraneDatum);
  }
}
/* </Objektu pro praci s tydennim kalendarem>  */
