function Ifmo_adapter(page) {
    this.page = page;
    this.tbl_data = [];
}

Ifmo_adapter.prototype.parse = function() {
    var page = this.page;
    var data = [];
    $(page).find('table[class != "wrapper"]').find("tr").each(function () {
        var row = {}
        var prob_num = 0;
        $(this).find("td").each(function () {
            var key = $(this).attr('class');
            if (key !== undefined)
                row[key] = $(this).html();
            else {
                prob_num++;
                var attempts = $(this).find("i");
                attempts = attempts.length == 0 ? $(this).find("b") : attempts
                if (attempts.length > 0) {
                    row['prob_' + prob_num + '_solved'] = $(attempts).html().indexOf("+") != -1;
                    var time = $(attempts).find("s");
                    if (time.length > 0) {
                        time.find("br").remove();
                        row['prob_' + prob_num + '_solved'] = time.html();
                        time.remove();
                    }
                    var attempts_cnt = $(attempts).html();
                    if (attempts_cnt.length == 1)
                        attempts_cnt = 1;
                    row['prob_' + prob_num + '_attempts'] = Math.abs(parseInt(attempts_cnt)) + 1;
                }
                else if ($(this).html() == ".") {
                    row['prob_' + prob_num + '_solved'] = false;
                    row['prob_' + prob_num + '_attempts'] = 0;
                }

            }
        });
        if (Object.keys(row).length > 0)
            data.push(row);
    });
    this.tbl_data = data;
}

Ifmo_adapter.prototype.get_data_for_table_model = function() {
    if (this.tbl_data.length == 0)
        this.parse();

    return this.tbl_data;
}
@@ -41,24 +41,48 @@
 age = page;%0A
+    this.problems = %5B%5D;%0A
     this.tbl
@@ -93,16 +93,16 @@
 a = %5B%5D;%0A
-
 %7D%0A%0AIfmo_
@@ -181,24 +181,47 @@
  data = %5B%5D;%0A
+    var problems = %5B%5D;%0A
     $(page).
@@ -305,16 +305,16 @@
 ow = %7B%7D%0A
-
         
@@ -327,24 +327,140 @@
 ob_num = 0;%0A
+        $(this).find(%22th.problem%22).each(function () %7B%0A            problems.push($(this).attr(%22title%22));%0A        %7D);%0A
         $(th
@@ -1808,16 +1808,46 @@
 = data;%0A
+    this.problems = problems;%0A
 %7D%0A%0AIfmo_
@@ -1989,8 +1989,145 @@
 _data;%0A%7D
+%0A%0AIfmo_adapter.prototype.get_problem = function() %7B%0A    if (this.problems.length == 0)%0A        this.parse();%0A%0A    return this.problems;%0A%7D

add problem names parsing