var AktualniDatum = new Date();
var VypDate = new Date();
var AktMesic = 0;
var AktRok = 0;
var Dnes = new Date();
var DatumOd = "";
var DnesDen = Dnes.getDate();
var DnesMesic = Dnes.getMonth();
var DnesRok = Dnes.getFullYear(); 
var Jazyk = "";
var TypPredstaveni = "";
var Minulost = "";
var MinulostRRRR = "";

// rozlišení prohlížečů na IE a nonIE
//var isIE = /*@cc_on!@*/false;
var isIE = $.browser.msie;
var isOpera = $.browser.opera;

var ClassAttr = "class";
if (isIE === true)
 {
  ClassAttr = "className"
 }

function VypRRMMDD(Dat)
{
 return (Dat.getFullYear() * 100 + (Dat.getMonth() + 1)) * 100 + Dat.getDate();
}

function VykresliDen(Row)
{
 // element TD
 var Col = document.createElement("td");
 var txt = document.createTextNode(VypDate.getDate());

 //odkaz na datum odpovídající vykreslované buňce 
 var RRRRMMDD = (VypDate.getFullYear() * 100 + (VypDate.getMonth() + 1)) * 100 + VypDate.getDate();
 var Odkaz = document.createElement("a");
 var Href = "Default.aspx?jz=" + Jazyk + 
            "&dk=program.aspx" + 
            "&ts=" + TypPredstaveni + 
            "&dod=" + RRRRMMDD;
            
 Odkaz.setAttribute("href",Href); 
 Odkaz.appendChild(txt);
 
 // třída vykreslované buňky
 var trida = "";
 var d1 = Dnes.getTime();
 var d2 = VypDate.getTime();
 var VypMonth = VypDate.getMonth();
 
 trida = (Dnes.getTime() > VypDate.getTime()) ? "bylo":"bude";
 trida = (AktMesic != VypMonth) ? "out":trida;
 
 if (RRRRMMDD == DatumOd)
 {
   trida = trida + " active"
 }
 
 Col.setAttribute(ClassAttr,trida);
 Col.appendChild(Odkaz);
 Row.appendChild(Col);
}

function PrevMonthRRRR(Datum)
{
  var PomDatum = new Date(Datum.getFullYear(),Datum.getMonth(),1);
  var Mnth = Datum.getMonth();

  while (Mnth == PomDatum.getMonth())
  {
    PomDatum = new Date(PomDatum.getTime() - 86400000);
  }
  return (PomDatum.getFullYear() * 100 + (PomDatum.getMonth() + 1)) * 100 + PomDatum.getDate();
}


function NextMonthRRRR(Datum)
{
  var PomDatum = new Date(Datum.getFullYear(),Datum.getMonth(),28);
  var Mnth = Datum.getMonth();

  while (Mnth == PomDatum.getMonth())
  {
    PomDatum = new Date(PomDatum.getTime() + 86400000);
  }
  return (PomDatum.getFullYear() * 100 + (PomDatum.getMonth() + 1)) * 100 + PomDatum.getDate();
}
 
function VytvorSloupec(Row,Value)
{
 var Col = document.createElement("td");
 var txt = document.createTextNode(Value);
 Col.setAttribute(ClassAttr,"out");
 Col.appendChild(txt);
 Row.appendChild(Col);
}

function VykresliNazevDne(Row,Idx,Ned)
{
 var Col = document.createElement("th");
 var txt = document.createTextNode(Dny[Idx].toLowerCase());
 if (Idx == Ned)
 { 
   var strong = document.createElement("strong");
   strong.appendChild(txt);
   Col.appendChild(strong);
 }
 else  
 {
   Col.appendChild(txt);
 }
 Row.appendChild(Col);
}


function VytvorRadek(Kal){
  var Row = document.createElement("tr");
  return Kal.appendChild(Row);
 }

function VykresliKalendar(RRRRMMDD,Lang,TypPred,Hranice,Od)
{
 DatumOd = Od;
 AktRok = RRRRMMDD.substr(0,4);
 AktMesic = RRRRMMDD.substr(4,2) -1;
 var AktDen = RRRRMMDD.substr(6,2);
 AktualniDatum = new Date(AktRok,AktMesic,AktDen);
 Minulost = new Date(Hranice.substr(0,4),Hranice.substr(4,2)-1,Hranice.substr(6,2));
 MinulostRRRR = Hranice;
 Jazyk = Lang;
 TypPredstaveni = TypPred;
 
 var Nedele = 0;
 
 // zjištění, od kterého dne mám kalendář vytvořit
 var PrvniDen = new Date(AktRok,AktMesic,1);
 var DenTyden = PrvniDen.getDay();

 switch (Jazyk.toUpperCase())
 {
  case "CZ":
   DenTyden = (DenTyden === 0 ? 7 : DenTyden) - 1; 
   PrvniDen = new Date(PrvniDen.getTime() - DenTyden * 86400000);
   
   // české texty
   Dny = ["PO","ÚT","ST","ČT","PÁ","SO","NE"];
   Mesice = new Array("Leden","Únor","Březen","Duben","Květen","Červen",
                      "Červenec","Srpen","Září","Říjen","Listopad","Prosinec");
   Nedele = 6;
   break;

  case "EN":
   PrvniDen = new Date(PrvniDen.getTime() - DenTyden * 86400000);
   Nedele = 0;
   Dny = new Array("SU","MO","TU","WE","TH","FR","SA");
   Mesice = new Array("January","February","March","April","May","June",
                      "July","August","September","October","November","December");
   break;
  } 
  
 //vím odkdy budu kalendář vytvářet,  

 // nastavení místa v dokumetu, kam se bude kalendář vypisovat
 var Koren = document.getElementById("Kalendar");

 // vytvořím základ tabulky
 // následující zakomentovaný text je přímo vložen do stránky a script
 // se chytá tagu Table s ID = "Kalendar"
 // var Tabulka = document.createElement("table");
 //  Tabulka.setAttribute("border",1);
 //Tabulka.setAttribute(ClassAttr,"calendar");
 
 var Kalendar = Koren;
 
 // tady mažu všechny děti v tabulce
 while (Koren.hasChildNodes())
 { 
   Koren.removeChild(Koren.childNodes[0]);
 }
 
 // var Kalendar = Koren.appendChild(Tabulka);
 
 // tady se musí vygenerovat záhlaví kalendáře s názvem měsíce a šipkami
 var ZahlaviObal = document.createElement("caption");
 var Zahlavi = document.createElement("span");
 var txt = document.createTextNode(Mesice[AktMesic] + " " + AktRok);
 
 Zahlavi.appendChild(txt);
 // ZahlaviObal.appendChild(Zahlavi);

 
 // odkaz na předcházející měsíc
 var Temp = PrevMonthRRRR(AktualniDatum);

 // generování Href podle prohlížeče
 //var Href = "javascript: return false;";
 //var Href = "#";
 var Href = (isOpera) ? "#":"javascript: return false;";
  
 // test, jestli vůbec můžu odkaz na minulý měsíc generovat 
 var TempMinulost = new Date(Temp.toString().substr(0,4),Temp.toString().substr(4,2)-1,Temp.toString().substr(6,2));
 if (Minulost.getTime() <= TempMinulost.getTime()) 
   {
     var PredMesic = document.createElement("a");

     var Dale = "VykresliKalendar('" + Temp + "','" + Jazyk + "','" + TypPredstaveni + "','" + 
                 MinulostRRRR + "','" + DatumOd + "')";
     var txt = document.createTextNode("předcházející měsíc");
     PredMesic.setAttribute("href",Href);
     PredMesic.setAttribute(ClassAttr,"prev");
     PredMesic.appendChild(txt);

     if(isIE === false)
       PredMesic.setAttribute("onclick",Dale);
      else
        PredMesic.onclick = new Function(Dale + ';');        
     
     Zahlavi.appendChild(PredMesic);
   }
  
 // odkaz na následující měsíc
 Temp = NextMonthRRRR(AktualniDatum);
 var DalsiMesic = document.createElement("a");
 Dale = "VykresliKalendar('" + Temp + "','" + Jazyk + "','" + TypPredstaveni + "','" + 
                          MinulostRRRR + "','" + DatumOd + "')";
 txt = document.createTextNode("další měsíc");
 
 DalsiMesic.setAttribute("href",Href);
 DalsiMesic.setAttribute(ClassAttr,"next");
 DalsiMesic.appendChild(txt);

 if(isIE === false)
   DalsiMesic.setAttribute("onclick",Dale);
  else
   DalsiMesic.onclick = new Function(Dale + ';');        

 Zahlavi.appendChild(DalsiMesic);

 ZahlaviObal.appendChild(Zahlavi);

 Kalendar.appendChild(ZahlaviObal);   
 
 // tělo tabulky
 var TableBody = document.createElement("tbody");
 Kalendar = Kalendar.appendChild(TableBody);
  
 // názvy jednotlivých dnů týdne
 var Radek = VytvorRadek(Kalendar);

 for (i = 0; i<7; i++)
  {
    VykresliNazevDne(Radek,i,Nedele);
  } 

 // cyklus přes jednotlivé dny
 
 // vytvořím první řádek kalendáře
  Radek = VytvorRadek(Kalendar); 
  
  var Pokracovat = true;
  VypDate = PrvniDen;  
  var Pocitadlo = 1;
  var VypMesic = 0;
  var VypRok = 0;
  var DalsiDen = 0;

  // cyklus pro vypisování jednotlivých dnů
  while (Pokracovat)
   { 
     VypMesic = VypDate.getMonth();
     VypRok = VypDate.getFullYear();
     
     VykresliDen(Radek);
     //VytvorSloupec(Radek,VypDate.getDate());
         
     Pocitadlo ++;
     
     // tato konstrukce je tam proto, že při změně letního času na zimní (v roce 2008 to je 26.10)
     // se připočte jen 23 hodin a proto má následující den stejné datum
     // proto testuji číslo dne a pokud se nezměnilo, přičtu konstatntu ještě jednou
     DalsiDen = VypDate.getDate()
     VypDate = new Date(VypDate.getTime() + 86400000);
     if (DalsiDen == VypDate.getDate())
     {
       VypDate = new Date(VypDate.getTime() + 86400000);     
     }
     
     if (Pocitadlo > 7)
      {
       if ((VypMesic == AktMesic) && (VypRok == AktRok))
        {
          Radek = VytvorRadek(Kalendar); 
          Pocitadlo = 1;
        }
        else
        {
          Pokracovat = false;
        }
      }
   }
return false;
}


