public void onDateSet(DatePicker view, int year, int month, int day) {
      // Do something with the date chosen by the user
      Calendar c = Calendar.getInstance();
      c.set(Calendar.YEAR, year);
      c.set(Calendar.MONTH, month);
      c.set(Calendar.DAY_OF_MONTH, day);

      Date weekStart = Week.getWeekStart(c.getTime());
      instance.mGshisLoader.setCurrWeekStart(weekStart);

      Pupil p = Pupil.getByFormName(instance.mGshisLoader.getLogin(), instance.getPupilName());
      if (p != null) {

        Schedule s = p.getScheduleByDate(weekStart);

        for (int index = 0; index < 4; index++) {

          GradeSemester sem = s.getSemesterByNumber(index);

          if (sem != null
              && sem.getStart().getTime() <= weekStart.getTime()
              && sem.getStop().getTime() >= weekStart.getTime()) {

            instance.mViewPager.setCurrentItem(index, true);
            break;
          }
        }
      }

      // this picker should not load again
      instance
          .getHandler()
          .postDelayed(
              new Runnable() {
                public void run() {

                  instance.recreate();
                }
              },
              1);
    }
  public static GradeSemester getActiveGradeSemester(Document doc, Schedule sch)
      throws ParseException {

    boolean found = false;
    GradeSemester selG = null;

    SimpleDateFormat fmt = new SimpleDateFormat("dd.MM.yyyy", Locale.ENGLISH);
    fmt.setTimeZone(TimeZone.getTimeZone("Europe/Moscow"));

    Elements semesterSelectors = doc.getElementsByAttributeValue("id", "ctl00_body_drdTerms");
    for (Element semesterSelector : semesterSelectors) {

      Elements semesters = semesterSelector.getAllElements();
      for (Element semester : semesters) {
        if (semester.tagName().equals("option")) {

          String value = semester.text();
          GradeSemester sem;
          found = true;

          if ((sem = sch.getSemester(semester.attr("value"))) == null) {

            sem = new GradeSemester();

            sem.setStart(fmt.parse(value.substring(12, value.indexOf("-") - 1)));
            sem.setStop(fmt.parse(value.substring(value.indexOf("-") + 2, value.length() - 2)));
            sem.setFormText(semester.text());
            sem.setFormId(semester.attr("value"));

            sch.addSemester(sem);
          }

          if (semester.hasAttr("selected") && semester.attr("selected").equals("selected")) {

            long u = sem.setLoaded().update();
            selG = sem;

            if (BuildConfig.DEBUG) Log.d("GshisHTMLParser", TS.get() + " Semester.update() = " + u);
          }
        }
      }
    }

    if (!found) throw new ParseException("Semesters not found", 0);

    return selG;
  }
  public static void getGrades(Document doc, Schedule sch, GradeSemester s) throws ParseException {

    mNewMarks = new ArrayList<MarkRec>();

    Elements tableCells = doc.getElementsByAttributeValue("class", "table rating");
    for (Element tableCell : tableCells) {

      Elements trs = tableCell.getElementsByTag("tr");
      for (Element tr : trs) {

        if (tr.hasAttr("class") && tr.attr("class").equals("table-header")) continue;

        GradeRec rec = new GradeRec();
        int thCount = 0;

        Elements ths = tr.getElementsByTag("th");
        for (Element th : ths) {

          if (th.hasAttr("class") && th.attr("class").equals("table-header3")) {

            rec.setFormText(th.text());
            thCount = 2;

          } else if (th.hasAttr("class") && th.attr("class").equals("cell-header2")) {

            switch (thCount) {
              case 2:
                if (containsPrintableChars(th.text())) rec.setAbsent(Integer.parseInt(th.text()));
                break;
              case 3:
                if (containsPrintableChars(th.text())) rec.setReleased(Integer.parseInt(th.text()));
                break;
              case 4:
                if (containsPrintableChars(th.text())) rec.setSick(Integer.parseInt(th.text()));
                break;
              case 5:
                if (containsPrintableChars(th.text()))
                  rec.setAverage(Float.parseFloat(th.text().replace(',', '.')));
                break;
            }

            thCount++;
          }
        }

        Element total = tr.getElementsByTag("td").last();
        if (containsPrintableChars(total.text()) && total.text().matches("[-+]?\\d*\\.?\\d+")) {

          rec.setTotal(Integer.parseInt(total.text()));
        }

        rec.setStart(s.getStart());
        rec.setStop(s.getStop());

        if (containsPrintableChars(rec.getFormText())) {

          GradeRec exR = sch.getGradeRecByDateText(rec.getStart(), rec.getFormText());
          if (exR != null) {

            //						if (BuildConfig.DEBUG)
            //							Log.d("GshisHTMLParser",
            //									TS.get()
            //											+ " before update GradeRec, start = "
            //											+ exR.getStart() + " stop = "
            //											+ exR.getStop() + " text = "
            //											+ exR.getFormText());

            exR.setAbsent(rec.getAbsent());
            exR.setAverage(rec.getAverage());
            exR.setReleased(rec.getReleased());
            exR.setSick(rec.getSick());
            exR.setTotal(rec.getTotal());

            // make sure we have only fresh marks
            exR.deleteMarks();

            @SuppressWarnings("unused")
            long u = exR.update();
            rec = exR;

            //						if (BuildConfig.DEBUG)
            //							Log.d("GshisHTMLParser", TS.get()
            //									+ " GradeRec.update() = " + u);
          } else {
            //						if (BuildConfig.DEBUG)
            //							Log.d("GshisHTMLParser", TS.get()
            //									+ " insert GradeRec = " + rec);

            sch.addGradeRec(rec);
          }

          for (Element td : tr.getElementsByTag("td")) {

            if (td.hasAttr("class") && td.attr("class").equals("grade-with-type")) {

              Element span = td.getElementsByTag("span").first();

              if (containsPrintableChars(span.text())
                  && containsPrintableChars(span.attr("title"))) {

                MarkRec mr = rec.getMarkRecByComment(span.attr("title"));
                if (mr != null) {

                  mr.setMarks(span.text());

                  @SuppressWarnings("unused")
                  long u = mr.update();

                  //									if (BuildConfig.DEBUG)
                  //										Log.d("GshisHTMLParser", TS.get() + " MarkRec.update() = " + u
                  //												+ " rec = " + rec);
                } else {

                  mr = new MarkRec(span.text(), span.attr("title"));

                  mNewMarks.add(mr);
                  rec.addMarcRec(mr);

                  //									if (BuildConfig.DEBUG)
                  //										Log.d("GshisHTMLParser", TS.get()
                  //												+ " insert MarkRec Comment = " + mr.getComment() + " Marks = "
                  //												+ mr.getMarks());
                }
              }
            }
          }
        }
      }
    }
  }