func vypis_vysledky(db sql.Db) {
	r := db.Getresults()

	//fmt.Println(r[2])
	//return

	f, err := os.Create("hodnoceni_cpv_2013.html")
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()
	fmt.Fprintf(f, `<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body><pre>
`)
	fmt.Fprintf(f, "\n")
	for _, k := range []string{"D", "H"} {
		fmt.Fprintf(f, "%s\n", k)
		fmt.Fprintf(f, "   pořadí  pořadí   ReČ             Jméno        počet    body\n")
		fmt.Fprintf(f, "    ČPV    absol.                               závodů\n")
		for _, l := range r {
			if l.Kategorie[0:1] != k {
				continue
			}
			fmt.Fprintf(f, "%7d %6d %10s %-24s %2d %7d    %s\n",
				l.P_poradi,
				l.Ap_poradi,
				strings.Replace(l.Z_id, "|", "", -1),
				l.Z_prijmeni+", "+l.Z_jmeno,
				l.Nzavodu,
				l.S_body,
				strings.Replace(l.Ap_scores, ",", " ", -1))
		}
		fmt.Fprintf(f, "\n")
	}
	fmt.Fprintf(f, `</pre>
</body>
</html>
`)
}
func vypis_vysledky(db sql.Db) {
	r := db.Getresults()

	classes := make(map[string]bool)
	for _, v := range r {
		cls := strings.Split(v.Kategorie, ",")
		for _, c := range cls {
			classes[c] = true
		}
	}

	// only classes someone competed in
	// this is a little bit wrong, should iterate over runners
	sclasses := make([]string, 0)
	for c, _ := range classes {
		sclasses = append(sclasses, c)
	}
	sort.Strings(sclasses)

	f, err := os.Create("cpv2012kateg.html")
	if err != nil {
		log.Fatal(err)
	}
	defer f.Close()
	fmt.Fprintf(f, `<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body><pre>`)
	fmt.Fprintf(f, "Pořadí Českého Poháru Veteránů 2013 dle kategorií\n\n")
	for _, k := range sclasses { // over all categories
		fmt.Fprintf(f, "          KATEGORIE %s\n", k)
		fmt.Fprintf(f, "poř.kat.  poř.ČPV abs.poř.  Reč         Jmeno             počet  body     body dle závodů\n")
		fmt.Fprintf(f, "                                                         závodů celkem  ")
		for i := 1; i <= COLS; i++ {
			fmt.Fprintf(f, "%2d.", i)
		}
		fmt.Fprintf(f, "\n")

		cntr := 1
		prevporadi := 0
		prevkatporadi := 0
		for _, l := range r { // over all runners

			cs := make(map[string]bool) // categories the person competed in
			for _, c := range strings.Split(l.Kategorie, ",") {
				cs[c] = true
			}

			classstr := strings.Split(l.Kategorie, ",")[0][:1] // pohlavi
			class, err := types.NewRegno(strings.Replace(l.Z_id, "|", "", -1)).ClassB()
			if err != nil {

				// max class
				classstr = strings.Split(l.Kategorie, ",")[0]
				for v, _ := range cs {
					if types.ClassLess(types.NewClass(classstr), types.NewClass(v)) {
						classstr = v
					}
				}
				log.Println(l.Z_prijmeni, l.Z_jmeno, l.Z_id, err, classstr)
			} else {
				classstr += fmt.Sprintf("%d", class)
			}
			//fmt.Println(classstr, k)
			if classstr != k {
				continue // skip the runner
			}

			katporadi := prevkatporadi
			if l.Ap_poradi != prevporadi {
				katporadi = cntr
			}

			races := db.Getraceresults(l.Z_id) // map[int]int
			sraces := racesTable(l, races)

			fmt.Fprintf(f, "%7d %6d %6d %10s %-24s %2d %7d    %s\n",
				katporadi, //db.Getkatporadi(l.Z_id, k), //l.Kp_poradi,
				l.P_poradi,
				l.Ap_poradi,
				strings.Replace(l.Z_id, "|", "", -1),
				l.Z_prijmeni+", "+l.Z_jmeno,
				l.Nzavodu,
				l.S_body,
				sraces.String())
			prevkatporadi = katporadi
			prevporadi = l.Ap_poradi
			cntr++
		}
		fmt.Fprintf(f, "\n")
	}
	fmt.Fprintf(f, `</pre>
</body>
</html>`)
}