/* (non-Javadoc)
  * @see com.google.code.p.gwtchismes.client.GWTCSimpleDatePicker#setSelectedDate(java.util.Date)
  */
 @Override
 public void setSelectedDate(Date d) {
   super.setSelectedDate(d);
   if (d == null) return;
   for (int i = 0; i < simpleDatePickers.size(); i++) {
     simpleDatePickers.get(i).setSelectedDate(d);
     simpleDatePickers.get(i).refresh();
   }
 }
  protected void setNumberOfMonths(int months) {
    monthColumns = Math.min(monthColumns, months);
    monthStep = Math.min(monthStep, months);
    simpleDatePickers = new Vector<GWTCSimpleDatePicker>();

    for (int i = 0; i < Math.max(1, months); i++) {
      GWTCSimpleDatePicker picker = new GWTCSimpleDatePicker(true);
      picker.showWeekNumbers(showWeekNumbers);
      picker.clickOnWeekNumbers(clickOnWeekNumbers);
      simpleDatePickers.add(picker);
      Label l = new Label();
      DOM.setElementAttribute(l.getElement(), "align", "center");
      monthHeaders.add(l);
    }
    setMinimalDate(super.getMinimalDate());
    setMaximalDate(super.getMaximalDate());
    setSelectedDate(super.getSelectedDate());
  }
 @Override
 public void onClick(ClickEvent event) {
   Widget sender = (Widget) event.getSource();
   if (prevMBtn.equals(sender)) {
     setCursorDate(
         GWTCSimpleDatePicker.increaseMonth(getCursorDate(), isMonthInRange(-1 * monthStep)));
   } else if (nextMBtn.equals(sender)) {
     setCursorDate(GWTCSimpleDatePicker.increaseMonth(getCursorDate(), isMonthInRange(monthStep)));
   } else if (prevYBtn.equals(sender)) {
     setCursorDate(GWTCSimpleDatePicker.increaseMonth(getCursorDate(), isMonthInRange(-12)));
   } else if (nextYBtn.equals(sender)) {
     setCursorDate(GWTCSimpleDatePicker.increaseMonth(getCursorDate(), isMonthInRange(12)));
   } else if (todayBtn.equals(sender)) {
     setCursorDate(new Date());
   } else if (helpBtn.equals(sender)) {
     helpDlg.alert(helpStr.replaceAll("\\n", "<br/>"));
   } else if (closeBtn.equals(sender)) {
     hide();
   } else {
     super.onClick(event);
   }
   refresh();
 }
 /** Redraw all calendar elements into the container */
 @Override
 public void refresh() {
   needsRedraw = false;
   prevMBtn.setEnabled(simpleDatePickers.get(0).isVisibleMonth(-1));
   nextMBtn.setEnabled(simpleDatePickers.get(0).isVisibleMonth(1));
   prevYBtn.setEnabled(simpleDatePickers.get(0).isVisibleMonth(-1));
   nextYBtn.setEnabled(simpleDatePickers.get(0).isVisibleMonth(1));
   todayBtn.setEnabled(
       getMonthNumber(simpleDatePickers.get(0).getCursorDate()) != getMonthNumber(new Date()));
   fillMenuItems();
   for (int i = 0; i < simpleDatePickers.size(); i++) {
     simpleDatePickers
         .get(i)
         .setCursorDate(
             GWTCSimpleDatePicker.increaseMonth(simpleDatePickers.get(0).getCursorDate(), i));
     simpleDatePickers.get(i).refresh();
     monthHeaders
         .get(i)
         .setText(
             GWTCSimpleDatePicker.formatDate(
                 MONTH_FORMAT, simpleDatePickers.get(i).getCursorDate()));
   }
 }
 /* (non-Javadoc)
  * @see com.google.code.p.gwtchismes.client.GWTCSimpleDatePicker#setMaximalDate(java.util.Date)
  */
 @Override
 public void setMaximalDate(Date d) {
   super.setMaximalDate(d);
   for (int i = 0; i < simpleDatePickers.size(); i++) simpleDatePickers.get(i).setMaximalDate(d);
 }
 /* (non-Javadoc)
  * @see com.google.code.p.gwtchismes.client.GWTCSimpleDatePicker#setCursorDate(java.util.Date)
  */
 @Override
 public void setCursorDate(Date d) {
   super.setCursorDate(d);
   simpleDatePickers.get(0).setCursorDate(d);
 }
 /* (non-Javadoc)
  * @see com.google.gwt.user.client.ui.Composite#onAttach()
  */
 @Override
 protected void onAttach() {
   super.onAttach();
 }
  private void fillMenuItems() {
    monthSelectorHeader.clearItems();
    monthMenu.clearItems();
    monthSelectorHeader.addItem(
        GWTCSimpleDatePicker.formatDate(MONTH_FORMAT, simpleDatePickers.get(0).getCursorDate()),
        monthMenu);

    int n = -1 * (monthSelector / 2);
    Date d = new Date(GWTCSimpleDatePicker.getFirstDayOfMonth(getCursorDate()).getTime());
    Date md =
        new Date(
            GWTCSimpleDatePicker.getFirstDayOfMonth(simpleDatePickers.get(0).getMinimalDate())
                .getTime());
    d = GWTCSimpleDatePicker.increaseMonth(d, n);
    while (GWTCSimpleDatePicker.compareDate(md, d) < 0) {
      d = GWTCSimpleDatePicker.increaseMonth(d, 1);
      n++;
    }
    n += monthSelector;
    d = GWTCSimpleDatePicker.increaseMonth(getCursorDate(), n);
    while (GWTCSimpleDatePicker.compareDate(simpleDatePickers.get(0).getMaximalDate(), d) > 0) {
      d = GWTCSimpleDatePicker.increaseMonth(d, -1);
      n--;
    }
    n -= monthSelector;
    d = GWTCSimpleDatePicker.increaseMonth(getCursorDate(), n);
    for (int i = n; i < monthSelector; i++) {
      String t = GWTCSimpleDatePicker.formatDate(MONTH_FORMAT, d);
      MenuCommand c = new MenuCommand(d);
      d = GWTCSimpleDatePicker.increaseMonth(d, 1);
      if (GWTCSimpleDatePicker.compareDate(d, simpleDatePickers.get(0).getMaximalDate()) >= 0
          && GWTCSimpleDatePicker.compareDate(simpleDatePickers.get(0).getMinimalDate(), d) > 0) {
        monthMenu.addItem(t, c);
      }
    }
  }