/**************************************************************************
 ************************** KLASA  KALENDARZ*******************************
 **************************************************************************/ 

//Aby poprawnie uruchomi� kalendarz, nale�y nada� nazw� zmiennej obiektowej "myKal"
//wszystkie metody dzialaja na zmiennych klasy Kalendarz 
function Kalendarz()
{
//ZMIENNE
  var data = new Date();
  this.rok = data.getFullYear();
  this.miesiac = data.getMonth();
  this.dzien = data.getDate(); 
  this.liczbaKomorek = 49;
   
  this.tablicaDni = Array();
  this.tablicaDni[0] = "Sun";
  this.tablicaDni[1] = "Mon";
  this.tablicaDni[2] = "Tue";
  this.tablicaDni[3] = "Wed";
  this.tablicaDni[4] = "Thu";
  this.tablicaDni[5] = "Fri";
  this.tablicaDni[6] = "Sat";
  this.tablicaDni[7] = "Nd";
  this.tablicaDni[8] = "Pon";
  this.tablicaDni[9] = "Wt";
  this.tablicaDni[10] = "Sr";
  this.tablicaDni[11] = "Czw";
  this.tablicaDni[12] = "Pt";
  this.tablicaDni[13] = "Sob";
  
  this.tablicaMiesiecy = Array();
  this.tablicaMiesiecy[0] = "Styczen";
  this.tablicaMiesiecy[1] = "Luty";
  this.tablicaMiesiecy[2] = "Marzec";
  this.tablicaMiesiecy[3] = "Kwiecien";
  this.tablicaMiesiecy[4] = "Maj";
  this.tablicaMiesiecy[5] = "Czerwiec";
  this.tablicaMiesiecy[6] = "Lipiec";
  this.tablicaMiesiecy[7] = "Sierpien";
  this.tablicaMiesiecy[8] = "Wrzesien";
  this.tablicaMiesiecy[9] = "Pazdziernik";
  this.tablicaMiesiecy[10] = "Listopad";
  this.tablicaMiesiecy[11] = "Grudzien";
  
//METODY
//*********************************** Metody glowne ***************************
  //uruchamia kalendarz
  this.startKalendarz = startKalendarz;

  //glowna metoda rysujaca siatke dni miesiaca
  this.ustawDzien = ustawDzien;
  


//************************************ Metody pomocnicze **********************
  //zwraca numer dnia tygodnia od ktorego rozpoczyna sie miesiac 0-niedziela... 6-sobota
  this.obliczPierwszyDzienMiesiaca = obliczPierwszyDzienMiesiaca;
  
  //zwraca 1 gdy rok jest przestepny, 0 w przeciwnym razie
  this.sprawdzCzyPrzestepny = sprawdzCzyPrzestepny;
  
  //zwraca liczbe dni miesiaca
  this.obliczLiczbeDniMiesiaca = obliczLiczbeDniMiesiaca;
  
  //konwertuje date do formatu 0000-00-00 rok-miesiac-dzien
  this.konwertujDate = konwertujDate;



//************************************* Metody zmiany daty ********************
  //metoda obslugujaca zdarzenie zwiekszenia miesiaca
  this.plusMiesiac = plusMiesiac;
  
  //metoda obslugujaca zdarzenie zmniejszenia miesiaca
  this.minusMiesiac = minusMiesiac;  
    
  //metoda obslugujaca klikniecie mysza na wybranym dniu
  this.wybranoDzien = wybranoDzien;
  
  

//************************************ Metody podswietlania dni ***************
  //metoda obslugujaca zdarzenie - kursor myszy nad dniem niesiaca 
  this.myszNad = myszNad;
  
  //metoda obslugujaca zdarzenie - kursor myszy wyszedl poza dzien miesiaca
  this.myszPoza = myszPoza;
}

/**************************************************************************
 ************************** METODY GLOWNE *********************************
 **************************************************************************/ 

//----------------------------------
function startKalendarz()
{
  document.write("<table id=\"kalTab\" class=\"operacjeMiesiac\">");
  document.write("<tr >");
  document.write("<td class=\"minus\" id=\"mMiesiac\" onClick=\"myKal.minusMiesiac()\"> &nbsp;&laquo; </td>");
  document.write("<td class=\"napisRokMiesiac\" id=\"rokMiesiac\">"+ this.rok + ",&nbsp " + this.tablicaMiesiecy[this.miesiac] +"</td>");
  document.write("<td class=\"plus\" id=\"pMiesiac\" onClick=\"myKal.plusMiesiac()\"> &raquo; &nbsp; </td>");
  document.write("</tr>");
  document.write("</table>");
  document.write('<table id="siatkaDni">');
  //naglowek dni
  document.write("<tr>");
  document.write("<td class=\"dni\">Po</td> \
                  <td class=\"dni\">Wt</td> \
                  <td class=\"dni\">Sr</td> \
                  <td class=\"dni\">Cz</td> \
                  <td class=\"dni\">Pt</td> \
                  <td class=\"dni\">So</td> \
                  <td class=\"niedziela\">Nd</td>");
  document.write("</tr>");
 //koniec naglowka dni
        
  //rysowanie komorek poszczegolnych dni
  for(i = 1; i <= 42; i++)
  {
    if((i==1) || (i==8) || (i==15) || (i==22) || (i==29) || (i==36)) {
      document.write("<tr>");
    }
    document.write("<td id=\"dzien"+i+"\" class=\"off\" onmouseover=\"myKal.myszNad(this)\" onmouseout=\"myKal.myszPoza(this)\" onClick=\"myKal.wybranoDzien(this)\">");
    document.write("</td>");
    
    if((i==7) || (i==14) || (i==21) || (i==28) || (i==35) || (i==42)) {
      document.write("</tr>");
    }
  }                
  document.write("</table>");
  this.ustawDzien();
  
}//function startKalendarz()


//---------------------------------------------
function ustawDzien(rok, miesiac, dzien)
{
  var data = new Date();
  var siatkaDni = Array(); //= document.getElementById("siatkaDni").cells;
  var _data_pol = document.getElementById("data_pol1");
  
  var PDM = this.obliczPierwszyDzienMiesiaca();
  var LDM = this.obliczLiczbeDniMiesiaca();
  var offset = 7 + PDM;
  var nazwa;
  var j=1;
  var DT = PDM;
  var licznik = 0;
  
  if(this.dzien>LDM)
    this.dzien = LDM;
  
  for(i=0;i<7;i++)
   for(j=0;j<7;j++)
   {
    siatkaDni[licznik] = document.getElementById("siatkaDni").rows[i].cells[j];
    licznik++;
   }
  
  j=1; 
  for(i=7;i<this.liczbaKomorek;i++)
  {
   if(window.navigator.appName=="Microsoft Internet Explorer")
     siatkaDni[i].innerText= " ";
   else siatkaDni[i].textContent = " ";

    if((i>=offset) && (j<=LDM))
    {
      siatkaDni[i].className = "off";
      if(window.navigator.appName=="Microsoft Internet Explorer")
       siatkaDni[i].innerText= j;
      else siatkaDni[i].textContent = j;
      j++;
    }
    else
      siatkaDni[i].className = "dzienPusty";
    
  }
  siatkaDni[6 + PDM + this.dzien].className = "dzienWybrany";
  
  for(i=1;i<this.dzien;i++)
  {
    if(DT==6) DT=0;
    else DT++;
  }
  
  _data_pol.value = this.konwertujDate();
}//function ustawDzien()

/**************************************************************************
 ************************** METODY POMOCNICZE *****************************
 **************************************************************************/ 

function obliczPierwszyDzienMiesiaca()
{
      var d = new Date();      
      var day = "";
      var dzien = "";
      //Odwracamy dni tygodnia tak zeby niedziela była ostatnia
      var odwDzien = Array();
      odwDzien[0] = 6;
      odwDzien[1] = 0;
      odwDzien[2] = 1;
      odwDzien[3] = 2;
      odwDzien[4] = 3;
      odwDzien[5] = 4;
      odwDzien[6] = 5;
      
      d.setFullYear(this.rok, this.miesiac, 1);
      dzien = d.toString();
      dzien = dzien.substring(0,3);
      for(i=0;i<7;i++)
      {
        day = this.tablicaDni[i].toString();
        if(day.match(dzien)!=null)
          return odwDzien[i];
      }
}//function obliczPierwszyDzienMiesiaca()

function sprawdzCzyPrzestepny()
{
  podziel =  this.rok/4;
  a = podziel.toString();
  if(a.search(/\./)>=0)
    return 0;
  else
    return 1;
}//function sprawdzCzyPrzestepny()

function obliczLiczbeDniMiesiaca()
{
  if(this.miesiac==1)
    if(this.sprawdzCzyPrzestepny()==1) return 29;
    else return 28;
  else
    if(this.miesiac==3 || this.miesiac==5 || this.miesiac==8 || this.miesiac==10) return 30;
    else return 31;
}//function obliczLiczbeDniMiesiaca()

function konwertujDate()
{
 var wynik = "";
 var _miesiac = this.miesiac + 1;
 
 wynik = wynik + this.rok + "-";
 
 if(_miesiac<10)
  wynik = wynik + "0" + _miesiac + "-";
 else
  wynik = wynik + _miesiac + "-";

 if(this.dzien<10)
  wynik = wynik + "0" + this.dzien;
 else
  wynik = wynik + this.dzien;

  return wynik;
}//function konwertujDate()

/**************************************************************************
 ************************** METODY ZMIANY DATY ****************************
 **************************************************************************/ 

function plusMiesiac()
{
  if(this.miesiac==11)
  {
    this.miesiac = 0;
    this.rok++;
  }
  else
    this.miesiac++;
   
  if(window.navigator.appName=="Microsoft Internet Explorer")
    document.getElementById("rokMiesiac").innerText = this.rok + ", " + this.tablicaMiesiecy[this.miesiac];
  else
    document.getElementById("rokMiesiac").textContent = this.rok + ", " + this.tablicaMiesiecy[this.miesiac];

  this.ustawDzien();
}//function plusMiesiac()

function minusMiesiac()
{
  if(this.miesiac==0)
  {
    this.miesiac = 11;
    this.rok--;
  }
  else
    this.miesiac--;
  if(window.navigator.appName=="Microsoft Internet Explorer")
    document.getElementById("rokMiesiac").innerText = this.rok + ", " + this.tablicaMiesiecy[this.miesiac];
  else
    document.getElementById("rokMiesiac").textContent = this.rok + ", " + this.tablicaMiesiecy[this.miesiac];
  this.ustawDzien();  
}//function minusMiesiac()

function wybranoDzien(id)
{
  if(id.className != "dzienPusty")
  {
     if(window.navigator.appName=="Microsoft Internet Explorer")
      this.dzien = parseInt(id.innerText);
     else this.dzien = parseInt(id.textContent);
    
    this.ustawDzien();
  }
}//function wybranoDzien(id)

/**************************************************************************
 ************************** METODY PODSWIETLANIA DZNI *********************
 **************************************************************************/ 

function myszNad(id)
{
  if(id.className=="off")
    id.className = "on";  
}//function myszNad(id)

function myszPoza(id)
{
  if(id.className=="on")
    id.className = "off";  
}//function myszPoza(id)

