/**
  id - identyfikator obiektu w który należy wstawić kalendarz
  header - czy nagłówek nawigacyjny ma być wyświetlany
  lang - język w jakim ma być pokazywany kalendarz
*/
  
/*var mn['en'] = ['January','February','March','April','May','June','July','August','September','October','November','December'] ;
var mn['pl'] = ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'];
    
var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
  */
  
 



function FlatCalendar( id , header, lang ) {
  var obid = id;
  var obheader = header;      // czy wyswietlac nafgluwek np: true lub false
  var oblang = lang;          // jezyk w jakim operuje kalendarz np: 'pl', 'en';

  var dim=[31,0,31,30,31,30,31,31,30,31,30,31];   // ilość dni w poszczególnych miesiącach
  
  var day_name = new Object();
  day_name['pl'] = ['Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'Sb', 'Nd'];
  day_name['en'] = [ 'mn', 'tw', 'we', 'th','fr','sa', 'su' ];
  
 // var mn = new Object();
 // mn['pl'] = ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'];
 // mn['en'] = ['January','February','March','April','May','June','July','August','September','October','November','December'] ;
  
  var now = new Date();
  
  var day = now.getDate();              // sets day
  var month = now.getMonth();           // sets month   Miesiace liczą sie od zera
  var year = now.getFullYear();         // sets year

  var set_day = null;                          // wybrany dzien w kalendarzu
  var set_month = null;
  var set_year = null;

  var block_enable = false;             // blokowanie domyślnie wyłączone
  var block_day ;                       // dzien ponizej ktorego nie mozesz zejsc ani wykonać na nim akcje
  var block_month ;
  var block_year;
  
  var actionClick = '';
  

  // wyswietla kalendarz według ustawień
  this.draw = function() {
    //alert(obid);
    //alert(actionClick);
    var code_calender = "<div class=\"flat_calender\">";
    if( obheader ) code_calender = drawHeader();
    
    code_calender = drawCalender();
   
    code_calender += "</div>";
    document.getElementById( obid ).innerHTML = code_calender ;  
  }
  
  // ustawia date dla kalendarza - miesiace liczy sie od 1
  this.setDate = function( n_day, n_month, n_year ) {
    day = n_day; month = n_month - 1; year = n_year;
    //this.draw();
  }
  
  // włącza blokowanie od podanej daty
  this.enableBlock = function( b_day, b_month, b_year ) {
    block_day = b_day;                      
    block_month = b_month - 1;
    block_year = b_year;
    block_enable = true;
    
    // jezeli zaznaczony dzien jest zablokowany to go odznacz
    
    if( blockGraterSet() ) {
      set_day = null;                          // wybrany dzien w kalendarzu
      set_month = null;
      set_year = null;
    }
    
  }
  
  // wyłącza sprawdzanie blokowania
  this.disableBlock = function() {
    block_enable = false;
  }
  
  // zaznacza wybrany dzień
  this.setDay = function( s_day, s_month, s_year ) {
    set_day = s_day;
    set_month = s_month - 1;
    set_year = s_year;
   // alert(obid + set_day + ' ' + set_month + ' ' + set_year);
    
  }
  
  this.getDay = function() { return day; }
  this.getMonth = function() { return month + 1; }
  this.getYear = function() { return year; }
  
  // zwraca true jeśli dzień jest wybrany  - przyjmuje dzien ktory sprawdzasz dla wyrysowywanego miesiąca
  var isSettedDay = function( check_day ) {
    //if( check_day == 8 ) alert(set_day + ' m: ' + month + " " + set_month + " y:" + year + " " + set_year );
    if( check_day != set_day ) return false;
    else {
      if( month != set_month ) return false ;
      else if( year != set_year ) return false ;
    } 
   return true;
  }

  // ustawia nazwe funkcji obsługi kliknięcia
  this.setAction = function( func ) {
    actionClick = func;
  }
    
  // wyswietla nagłówek kalendarza
  var drawHeader = function() {
    return "<br/> wyswietla naglowek nawigacyjny <br />";
  }

  var drawCalender = function() {
   
    var cal = '<div class="day_cointainer">';
    
     
    
    if( month == 1 ) dim[1] = getFebruaryDays(year);     // jezeli mamy wyswietlic miesiac luty to sprawdzamy ile ma dni
    
    // nagłówek z dniami tygodnia
    for( var i = 0; i < 7; ++i ) 
      cal += '<a href="#" class="day_name">'+ day_name[lang][i] +'</a>';
    
    // puste dni
    var from = new Date(year, month, 1); // wzliczenie od ktorego dnia tygodnia zaczyna sie miesiac
    var dd = from.getDay() - 1;           // przesuniecie o jeden dzien w tyl aby tydzien zaczynal sie od poniedzialku 
    if( dd < 0 ) dd = 6;                  // pierwszym dniem jest niedziela
  
    for( var i = 0; i < dd; ++i ) 
      cal += '<a href="javascript:void(0);" class="day day_empty"></a>';
    
    
    // dni kalendarza
    if( block_enable && isBlockedMonth() ) {  
      var bd = getBlockDay();
      if( bd < 0 ) bd = dim[month]; // cały miesiąc jest blokowany
      //blokowane dni
      for(i = 1; i <= bd; ++i) 
        cal += '<a href="javascript:void(0);" class="day day_block">'+ i +'</a>';
      // normalne dni
      for(i = bd + 1; i <= dim[month]; ++i)  {
        if( isSettedDay( i ) ) 
          cal += '<a href="#" class="day day_selected">'+ i +'</a>';
        else  
          cal += '<a href="javascript:void(0);" onclick="'+actionClick+'( '+ i +' )" class="day day_calender">'+ i +'</a>';
        
      }  
    } else {
      for( var i = 1; i <= dim[month]; ++i) 
        if( isSettedDay( i ) ) 
          cal += '<a href="#" class="day day_selected">'+ i +'</a>';
        else  
          cal += '<a href="javascript:void(0);" onclick="'+actionClick+'( '+ i +' )" class="day day_calender">'+ i +'</a>';
    }
    
    
    
    cal += "</div>";
    
   // alert(obid + set_day + ' ' + set_month + ' ' + set_year);
    
    return cal;
  }
  
  // zwraca true jesli obecnie wyswietlany miesiąc ma być blokowany
  var isBlockedMonth = function() {
    if( year < block_year ) return true;
    else {
      if( year == block_year && month <= block_month ) return true;
    }
    return false;
  }
  
  // zwraca dzien do ktorego miesiac jest blokowany - liczba -1 informuje ze cały miesiac jest blokowany
  var getBlockDay = function() {
    if( year < block_year ) return -1;
    else {
      if( month < block_month ) return -1;
      else return block_day;
    }
    return -1;
  }

  // zwraca ile dni ma luty w danym roku
  var getFebruaryDays = function( year ) {
    return ( ( (year % 100 != 0 ) && ( year %4 == 0 ) ) || ( year % 400 == 0 ) ) ? 29 : 28 ;
  }
  
  
  // zwraca true jeśli zaznaczony dzień jest zablokowany
  var blockGraterSet = function() {
    if( set_day != null ) {
      if( set_year < block_year ) return true;
      if( set_year == block_year && set_month < block_month ) return true;
      if( set_year == block_year && set_month == block_month && set_day <= block_day ) return true;    
    }
    return false;
  }
}




