

Date.prototype.getLastDay = function () {
  var m = [31,28,31,30,31,30,31,31,30,31,30,31];
  if (this.getMonth() != 2) return m[this.getMonth()];
  if (this.getYear() % 4 != 0) return m[1];
  if (this.getYear() % 100 == 0 && this.getYear() % 400 != 0) return m[1];
  return m[1] + 1;
}


var gCalendar = {
  
  calendar: function(input) {
    var dateformat = /^\d{4}-\d{2}-\d{2}$/;
    var cdate = new Date();
    var cday = cdate.getDate();
    var cmonth = cdate.getMonth() + 1;
    var cyear = cdate.getFullYear();
    var val = input.val();
    if (val.match(dateformat)) {
      cmonth = val.substring(5, 7);
      cday = val.substring(8);
      cyear = val.substring(0, 4);
      
    }
    
    var miesiace = new Array("","Sty","Luty","Mar","Kwie","Maj","Czerw","Lipiec","Sierp","Wrześ","Pazdz","List","Gru");
    
    $('#gcalendar').remove();
  
    
    
    var offset = input.offset();
    var left = offset.left;
    var top = offset.top + input.height() - 230;
    
    
    
    var cal = $('<div id="gcalendar" style="padding:5px 6px;"></div>');
    cal.css('position', 'absolute');
    cal.css('left', left + 'px');
    cal.css('top', top + 'px');
    cal.css('border', '1px solid #fefefe');
    cal.css('background', 'url(images/icons/calendar_bg.png) no-repeat');
    cal.width(188);
    cal.height(190);
    
    cal.get(0).set_date = function(year, month, day) {
      $('#gcalendar').remove();
      if (month<10) month = '0' + month;
      if (day<10) day = '0' + day;
      input.val(year+'-'+month+'-'+day);
    }
    
    cal.get(0).display = function(year, month) {
      var pyear = year;
      var pmonth = month - 1;
      if (pmonth < 1) {
        pmonth = 12; 
        pyear--;
      }
      var nyear = year;
      var nmonth = month + 1;
      if (nmonth > 12) {
        nmonth = 1; 
        nyear++;
      }
      
      var html = '<div style="text-align:center; padding: 6px 10px">'
               + '<img style="float:right" src="images/icons/close.gif" onclick="$(\'#gcalendar\').hide()" />'
               + '<img src="images/icons/prev.png" onclick="$(\'#gcalendar\').get(0).display('+pyear+','+pmonth+')"" />'
               + ' <b>' + miesiace[parseInt(month)] + ' / ' + year + '</b> '               
               + '<img src="images/icons/next.png" onclick="$(\'#gcalendar\').get(0).display('+nyear+','+nmonth+')"" />'
               + '</div><div style="text-align:center;line-height:22px !important;line-height:17px;">'; 
               
      var dater = new Date(year, month-1, 1);
      var days = new Array('Pn','Wt','Śr','Cz','Pt','So','Nd');
      html += '<div style="margin:bottom:5px;margin-top:5px;background:#e6e6e6">';
      for (var i=0; i<7; i++) {
        html += '<div style="width:26px;float:left;">' + days[i] + '</div>';
      }
      html += '<div style="clear:both"></div>';
      html += '</div>';
      
      //dater.setFullYear();
      var space = dater.getDay() ? (dater.getDay()-1) : 6;
      for (var i=0; i<space; i++) {
        html += '<div style="width:26px;float:left;">&nbsp;</div>';
      }
      var last = dater.getLastDay() + 1;
      for (var i=1; i<last; i++) {
        bold = '';
        if (cday == i && cmonth == month && cyear == year) {
          bold = "font-weight:bold;background:#e6e6e6;"
        }
        html += '<a href="javascript:$(\'#gcalendar\').get(0).set_date('+year+','+month+','+i+');" style="display:block;width:26px;float:left;'+bold+'">' + i  + '</a>';
        if ((i-1) % 7 == (6 - space)) {
          html += '<div style="clear:both"></div>';
        }
      }
      
      html += '</div>';
      
      
       
      
      $(this).empty().append(html);
    }
    
    cal.get(0).display(cyear, cmonth);
    
    $('body').append(cal);  
      
    return this;
  }
} 

jQuery.fn.extend(gCalendar);

