// JavaScript Document
function Kalendar( divId, spanId, yId, url, vyznacDny, vyznacOth, lan )
{
 var outHtml     = "";
 var outMesic    = "";
 var dnesniDatum = new Date();
 var holder      = divId;
 var mesicHolder = spanId;
 var yearHolder  = yId;
 var urlPrefix   = url;

 var vyznac      = vyznacDny;
 var vyznacOther = vyznacOth;

 var kalendarHTML;
 var kalendarHTMLHead;

 var LastMesic = 0; //used in prev&next
 var LastRok   = 0;
 var LastDen   = 0;

    //pozor vsechny mesice jsou brany jakoze leden = 0
    var mesice;

    if( lan == 'cz' ) {
      mesice = new Array("leden","únor","březen","duben","květen","červen",
                "červenec","srpen","září","říjen","listopad","prosinec");

     kalendarHTMLHead = '<div class="calendarHead">'  
                       +'<span class="calendarHeadCell">po</span>' 
                       +'<span class="calendarHeadCell">út</span>' 
                       +'<span class="calendarHeadCell">st</span>' 
                       +'<span class="calendarHeadCell">čt</span>' 
                       +'<span class="calendarHeadCell">pá</span>' 
                       +'<span class="calendarHeadCell">so</span>' 
                       +'<span class="calendarHeadCell">ne</span>' 
                     +'</div> ';
    
    }
    else 
    {
      mesice = new Array("January","February","March","April","May","June","July",
                       "August","September","October","November","December");

     kalendarHTMLHead = '<div class="calendarHead">' 
                      +'<span class="calendarHeadCell">mo</span>'
                      +'<span class="calendarHeadCell">th</span>' 
                      +'<span class="calendarHeadCell">we</span>' 
                      +'<span class="calendarHeadCell">th</span>' 
                      +'<span class="calendarHeadCell">fr</span>' 
                      +'<span class="calendarHeadCell">sa</span>' 
                      +'<span class="calendarHeadCell">so</span>' 
                    +'</div> ';
    }

 this.build = build;
 this.prev  = prev;
 this.next  = next;

 this.Yprev  = Yprev;
 this.Ynext  = Ynext;


 function build( den, mesic, rok )
 {
    LastDen   = den;
    LastMesic = mesic;
    LastRok   = rok;
    var buildDen = new Date();
    buildDen.setDate(den);
    buildDen.setMonth(mesic);
    buildDen.setYear(rok);

   //sestavime kalendar tak ze vezmeme prvni den v mesici a zjistime co to bylo
   var prvniDenVmesici = new Date(rok,mesic,1);
   var zacatekMesice   = prvniDenVmesici.getDay();     

   var minulyMesic = ( mesic - 1 );
   if( minulyMesic == -1 ) 
    {
     minulyRok = rok - 1;
     minulyMesic = 11;
    }
   else minulyRok = rok;

   var pocetDniMinulehoMesice = this.getPocetDniVMesici( minulyMesic, minulyRok );


    //a pripravime vystup kalendare
    //hlavicka ;p
    var kalendarHTML = kalendarHTMLHead;

  

    var presahZMinulehoMesice;

    if( zacatekMesice == 0 ) presahZMinulehoMesice = pocetDniMinulehoMesice - 6;
    else {
      presahZMinulehoMesice = pocetDniMinulehoMesice - zacatekMesice + 1;
    }

    //pozor je ve vsech 3 cyklech
    var counter = 0;
    var oznaceny = false;
    var otherOznaceny = false;

    //prvni radek
    if( (pocetDniMinulehoMesice - presahZMinulehoMesice)  > 0 )
    {
      kalendarHTML += '<div class="calendarLine">';
    } 
    else //prasecinka
     kalendarHTML += '<div style="float: left">';

    for ( i = (presahZMinulehoMesice+1); i<(pocetDniMinulehoMesice+1); i++ ) 
    {
      
      hrefDate = minulyRok+'-';
      if( minulyMesic+1 < 10 )hrefDate += "0"+(minulyMesic+1)+"";
      else hrefDate += ""+(minulyMesic+1)+"";
      hrefDate += '-';
      if( i < 10 ) hrefDate += "0"+i;
      else hrefDate += i;
      counter++;

      oznaceny = false;  
      for( v=0; v<vyznac.length; v++ )
      {
        if( hrefDate == vyznac[v] ) oznaceny = true; 
      }

      otherOznaceny = false;  
      for( v=0; v<vyznacOther.length; v++ )
      {
        if( hrefDate == vyznacOther[v] ) otherOznaceny = true; 
      }

       if( otherOznaceny )         
        kalendarHTML += '<a class="calendarCell hrefDayActive" href="'+urlPrefix+hrefDate+'">'+i+'</a>'; 
       else {
         if( oznaceny  )
          kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell hrefDay">'+i+'</a>'; 
         else
          kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell prevMonth">'+i+'</a>'; 
       }
    }

    

    //samotny mesic
    for (i=1; i < ( this.getPocetDniVMesici(mesic,rok) + 1 ); i++ )
    {
      //novy tyden
      if( counter%7 == 0 ) {
        kalendarHTML += '</div><div class="calendarLine">';
      } 

      //mesice to ma porad JS 
      hrefDate = rok+'-';
      if( (mesic+1) < 10 ) hrefDate += "0"+(mesic+1);
      else hrefDate += (mesic+1);
      hrefDate +="-";
      if( i < 10 ) hrefDate += "0"+i;
      else hrefDate += i;

      oznaceny = false;  
      for( v=0; v<vyznac.length; v++ )
      {
        if( hrefDate == vyznac[v] ) oznaceny = true;
      }

      otherOznaceny = false;  
      for( v=0; v<vyznacOther.length; v++ )
      {
        if( hrefDate == vyznacOther[v] ) otherOznaceny = true; 
      }

      //pokud je to dnesni den tak ho vyznacit            
      //if( dnesniDatum.getDate() == buildDen.getDate() && i == dnesniDatum.getDate() && buildDen.getMonth() == dnesniDatum.getMonth() && buildDen.getFullYear() == dnesniDatum.getFullYear()  )
      if( i == dnesniDatum.getDate() && mesic == dnesniDatum.getMonth() && rok == dnesniDatum.getFullYear()  )
      //if( i == buildDen.getDate() )
      {
       kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" ';

       if( otherOznaceny ) 
        kalendarHTML +=   'class="calendarCell actualHrefDayActive">'+i+'</a>'; 
       else {
        if(oznaceny) 
         kalendarHTML +=   'class="calendarCell actualHrefDay">'+i+'</a>'; 
        else
         kalendarHTML +=   'class="calendarCell actualDay">'+i+'</a>'; 
        }
      } 

      else 
      { 
       if( otherOznaceny )
        kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell hrefDayActive">'+i+'</a>'; 
       else {
        if(oznaceny) 
         kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell hrefDay">'+i+'</a>'; 
        else
         kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell actualMonth">'+i+'</a>'; 
       }
      }

      counter++;
    }



    var nasledujiciMesic = mesic +1;

    //osetrime pretejkani do minuleho roku
    if( nasledujiciMesic == 12 ) 
    {
     nasledujiciRok   = rok + 1;
     nasledujiciMesic = 0;
    }
    else  nasledujiciRok = rok; 

    //dalsi mesic ;p    
    dalsi = counter%7;
    if( dalsi > 0 ){
     for( i = dalsi ,j=1; i < 7; i++,j++ )
      {

       hrefDate = nasledujiciRok+'-';
       if(nasledujiciMesic+1 < 10) hrefDate += "0"+(nasledujiciMesic+1);
       else hrefDate += (nasledujiciMesic+1);
       hrefDate += '-';
       if( j < 10 ) hrefDate += "0"+j;
       else hrefDate += j;

      oznaceny = false;  
      for( v=0; v<vyznac.length; v++ )
      {
        if( hrefDate == vyznac[v] ) oznaceny = true; 
      }
  
      otherOznaceny = false;  
      for( v=0; v<vyznacOther.length; v++ )
      {
        if( hrefDate == vyznacOther[v] ) otherOznaceny = true; 
      }

      if( otherOznaceny )
       kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell hrefDayActive">'+j+'</a>'; 
      else
       if( oznaceny )
        kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell hrefDay">'+j+'</a>'; 
       else 
        kalendarHTML += '<a href="'+urlPrefix+hrefDate+'" class="calendarCell prevMonth">'+j+'</a>'; 
      }
    }

    kalendarHTML += '</div>';


    if (document.getElementById(yearHolder))
      document.getElementById(yearHolder).innerHTML  = rok;
    if (document.getElementById(mesicHolder))
      document.getElementById(mesicHolder).innerHTML = mesice[mesic];
    if(document.getElementById(holder))
      document.getElementById(holder).innerHTML      = kalendarHTML;


 } //end build


this.getPocetDniVMesici = function ( cisloMesice, rok ) {
     switch (cisloMesice ) 
     { 
      //jedna 31 dni v mesici 
      case 0 :
      case 2 :
      case 4 :
      case 6 :
      case 7 :
      case 9 :  
      case 11:
            return 31; break; 
  
      //28;p
      case 1 : 
            if ( rok%4 == 0 ){
              return 29;  
            }else return 28;break;
      
      case 3 :
      case 5 :
      case 8 :
      case 10:
            return 30; break; 
     }
}


function prev() {
   var novyDen   = LastDen;
   var novyMesic = (LastMesic - 1);
   var novyRok   = LastRok;

   if( novyMesic == -1 ) {
    novyMesic = 11;
    novyRok--;
   }
   kalendar.build(novyDen,novyMesic,novyRok); 
 }
 
function next() {
   var novyDen   = LastDen;
   var novyMesic = (LastMesic + 1);
   var novyRok   = LastRok;

   if( novyMesic == 12 ) {
    novyMesic = 0;
    novyRok++;
   }
   kalendar.build(novyDen,novyMesic,novyRok); 
}

function Yprev() {
   var novyRok   = LastRok;
   novyRok--;
   kalendar.build(LastDen,LastMesic,novyRok); 
 }
 
function Ynext() {
   var novyRok   = LastRok;
   novyRok++;
   kalendar.build(LastDen,LastMesic,novyRok); 
}

} //end class Kalendar

