public bool VisaSvar(prov facit, int resultat, int produkterochhanteringavkundensaffärer, int ekonominationalekonomifinansiellekonomiochprivatekonomi, int etikochregelverk)
        {
            int i = -1;

            foreach (RepeaterItem item in Repeater1.Items) // loopar genom alla objekt i repeatern
            {
                i++;
                if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                {
                    if (facit.fragelista[i].svarsalternativa != null)
                    {
                        var LabelA = (Label)item.FindControl("LabelA");
                        LabelA.CssClass = "korrektsvar";
                    }

                    if (facit.fragelista[i].svarsalternativb != null)
                    {
                        var LabelB = (Label)item.FindControl("LabelB");
                        LabelB.CssClass = "korrektsvar";
                    }

                    if (facit.fragelista[i].svarsalternativc != null)
                    {
                        var LabelC = (Label)item.FindControl("LabelC");
                        LabelC.CssClass = "korrektsvar";
                    }

                    if (facit.fragelista[i].svarsalternativd != null)
                    {
                        var LabelD = (Label)item.FindControl("LabelD");
                        LabelD.CssClass = "korrektsvar";
                    }
                }

            }

            int totalt = 25;
            int totaltkategori1 = 8;
            int totaltkategori2 = 8;
            int totaltkategori3 = 9;

            int person_id = HamtaID2();
            if (SenasteProv(person_id))
            {
                totalt = 15;
                totaltkategori1 = 5;
                totaltkategori2 = 5;
                totaltkategori3 = 5;
            }

            if (resultat >= 0.7 * totalt && produkterochhanteringavkundensaffärer >= 0.6 * totaltkategori1 && ekonominationalekonomifinansiellekonomiochprivatekonomi >= 0.6 * totaltkategori2 && etikochregelverk >= 0.6 * totaltkategori3)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
        public Tuple<prov, int, int, int, int> RattaProv(prov gjortprov, bool visagammalt)
        {
            string xml = Server.MapPath("facit.xml");

            XmlSerializer deserializer = new XmlSerializer(typeof(prov));
            TextReader reader = new StreamReader(xml);
            object obj = deserializer.Deserialize(reader);
            prov facit = (prov)obj;
            reader.Close();

            int l = 0;
            int k = -1;
            int i = -1;
            int resultat = 0;
            int flersvarsfraga;
            int produkterochhanteringavkundensaffärer = 0;
            int ekonominationalekonomifinansiellekonomiochprivatekonomi = 0;
            int etikochregelverk = 0;

            int person_id = HamtaID2();

            if (SenasteProv(person_id))     //Returnerar en boolean som berättar om man gjort provet tidigare
            {
                prov nyfacit = new prov();

                foreach (object objektobjekt in facit.fragelista)
                {
                    k++;
                    if (gjortprov.fragelista[l].nr == facit.fragelista[k].nr)
                    {
                        nyfacit.fragelista.Add(facit.fragelista[k]);
                        l++;

                        if (l == 15 && visagammalt == false)
                        {
                            break;
                        }
                    }
                }
                facit.fragelista.Clear();
                facit = nyfacit;
            }

            foreach (object objekt in gjortprov.fragelista)
            {
                flersvarsfraga = 0;
                i++;

                if (gjortprov.fragelista[i].info != facit.fragelista[i].info)
                {
                    //För många eller för få alternativ kryssade. Skickar vidare till nästa fråga
                }

                else
                {
                    if (gjortprov.fragelista[i].svarsalternativa == facit.fragelista[i].svarsalternativa && gjortprov.fragelista[i].svarsalternativa != null)
                    {
                        if (Convert.ToInt32(facit.fragelista[i].info) == 1)
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }

                        else if (Convert.ToInt32(facit.fragelista[i].info) > 1)
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }
                    }

                    if (gjortprov.fragelista[i].svarsalternativb == facit.fragelista[i].svarsalternativb && gjortprov.fragelista[i].svarsalternativb != null)
                    {
                        if (Convert.ToInt32(facit.fragelista[i].info) == 1)
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }

                        else if (Convert.ToInt32(facit.fragelista[i].info) > 1)
                        {
                            flersvarsfraga++;
                        }

                        if (flersvarsfraga == Convert.ToInt32(facit.fragelista[i].info))
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }
                    }

                    if (gjortprov.fragelista[i].svarsalternativc == facit.fragelista[i].svarsalternativc && gjortprov.fragelista[i].svarsalternativc != null)
                    {
                        if (Convert.ToInt32(facit.fragelista[i].info) == 1)
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }

                        else if (Convert.ToInt32(facit.fragelista[i].info) > 1)
                        {
                            flersvarsfraga++;
                        }

                        if (flersvarsfraga == Convert.ToInt32(facit.fragelista[i].info))
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }
                    }

                    if (gjortprov.fragelista[i].svarsalternativd == facit.fragelista[i].svarsalternativd && gjortprov.fragelista[i].svarsalternativd != null)
                    {
                        if (Convert.ToInt32(facit.fragelista[i].info) == 1)
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }

                        else if (Convert.ToInt32(facit.fragelista[i].info) > 1)
                        {
                            flersvarsfraga++;
                        }

                        if (flersvarsfraga == Convert.ToInt32(facit.fragelista[i].info))
                        {
                            if (facit.fragelista[i].kategori.ToString() == "Produkter och hantering av kundens affärer")
                            {
                                resultat++;
                                produkterochhanteringavkundensaffärer++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                            {
                                resultat++;
                                ekonominationalekonomifinansiellekonomiochprivatekonomi++;
                            }

                            if (facit.fragelista[i].kategori.ToString() == "Etik och regelverk")
                            {
                                resultat++;
                                etikochregelverk++;
                            }
                        }
                    }
                }
            }
            return Tuple.Create(facit, resultat, produkterochhanteringavkundensaffärer, ekonominationalekonomifinansiellekonomiochprivatekonomi, etikochregelverk);
        }
        public void SerializaSvar(prov svar)
        {
            string directory = Server.MapPath("svar.xml");

            XmlSerializer serializer = new XmlSerializer(typeof(prov));
            using (TextWriter writer = new StreamWriter(directory))
            {
                serializer.Serialize(writer, svar);
            }
        }
        public prov HittaSvar(prov provet)
        {
            prov gjortprov = new prov();
            int checkboxkontroll;

            int i = -1;

            foreach (RepeaterItem item in Repeater1.Items) // loopar genom alla objekt i repeatern
            {
                i++;
                checkboxkontroll = 0;

                fraga fragaobj = new fraga();
                if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                {
                    var checkBoxA = (CheckBox)item.FindControl("CheckBoxA");
                    if (checkBoxA.Checked == true)      // Kollar om checkbox A är markerad för gällande fråga
                    {
                        fragaobj.svarsalternativa = provet.fragelista[i].svarsalternativa; // Skapar ett frågeobjekt med endast valda svarsalternativ
                        fragaobj.nr = provet.fragelista[i].nr;

                        checkboxkontroll++;

                        var LabelA = (Label)item.FindControl("LabelA");
                        LabelA.CssClass = "felsvar";        // Om svar A är valt så blir det röd-färgat
                        // Alla svar som man svarat blir röda, de korrekta ändras sedan till gröna i VisaSvar()
                    }

                    var checkBoxB = (CheckBox)item.FindControl("CheckBoxB");
                    if (checkBoxB.Checked == true)
                    {
                        fragaobj.svarsalternativb = provet.fragelista[i].svarsalternativb;
                        fragaobj.nr = provet.fragelista[i].nr;

                        checkboxkontroll++;

                        var LabelB = (Label)item.FindControl("LabelB");
                        LabelB.CssClass = "felsvar";

                    }

                    var checkBoxC = (CheckBox)item.FindControl("CheckBoxC");
                    if (checkBoxC.Checked == true)
                    {
                        fragaobj.svarsalternativc = provet.fragelista[i].svarsalternativc;
                        fragaobj.nr = provet.fragelista[i].nr;

                        checkboxkontroll++;

                        var LabelC = (Label)item.FindControl("LabelC");
                        LabelC.CssClass = "felsvar";

                    }

                    var checkBoxD = (CheckBox)item.FindControl("CheckBoxD");
                    if (checkBoxD.Checked == true)
                    {
                        fragaobj.svarsalternativd = provet.fragelista[i].svarsalternativd;
                        fragaobj.nr = provet.fragelista[i].nr;

                        checkboxkontroll++;

                        var LabelD = (Label)item.FindControl("LabelD");
                        LabelD.CssClass = "felsvar";
                    }

                    if (checkBoxA.Checked == false && checkBoxB.Checked == false && checkBoxC.Checked == false && checkBoxD.Checked == false)
                    {
                        fragaobj.nr = provet.fragelista[i].nr;
                    }
                }
                fragaobj.info = checkboxkontroll.ToString();
                gjortprov.fragelista.Add(fragaobj); // lägger till svaret i en lista
            }

            return gjortprov;
        }
        //Returnerar en lista med 15 frågeobjekt av utvald kategori
        public prov HamtaFragorLicensierad()
        {
            string xml = Server.MapPath("fragor.xml");  // xml filen läses in till en textsträng

            XmlSerializer deserializer = new XmlSerializer(typeof(prov));
            TextReader reader = new StreamReader(xml);
            object obj = deserializer.Deserialize(reader);  // Xml-filen läses in och deserialiseras till en lista av fråge objekt i enlighet med klassen "fragor.cs"
            prov XmlData = (prov)obj;
            reader.Close();

            int i = 0;
            int antal = 0;
            prov listafragor = new prov();

            foreach (object objekt in XmlData.fragelista)       //Loopar igenom frågorna
            {
                if (XmlData.fragelista[i].kategori == "Produkter och hantering av kundens affärer")     // Väljer ut frågor av en viss kategori
                {
                    if (antal <= 4)
                    {
                        antal++;
                        listafragor.fragelista.Add(XmlData.fragelista[i]);      // De första 5 frågorna i provet skall tillhöra den valda kategorin
                    }
                }

                if (XmlData.fragelista[i].kategori == "Ekonomi – nationalekonomi, finansiell ekonomi och privatekonomi")
                {
                    if (antal >= 5 && antal <= 9)
                    {
                        antal++;
                        listafragor.fragelista.Add(XmlData.fragelista[i]);
                    }
                }

                if (XmlData.fragelista[i].kategori == "Etik och regelverk.")
                {
                    if (antal <= 14 && antal >= 10)
                    {
                        antal++;
                        listafragor.fragelista.Add(XmlData.fragelista[i]);
                    }
                }

                i++;
            }

            return listafragor;
        }
        public void GridView1_SelectedIndexChanged(Object sender, EventArgs e)
        {
            bool visagammalt = true;
            var tuple = HamtaFragorDB();
            string svarxml = tuple.Item1;
            string facitxml = tuple.Item2;

            prov provet = new prov();

            if (RaknaSvar(facitxml) == 15)
            {
                provet = HamtaFragorLicensierad();
            }

            if (RaknaSvar(facitxml) == 25)
            {
                provet = HamtaFragor();
            }

            Repeater1.DataSource = provet.fragelista;
            Repeater1.DataBind();

            CheckaCheckboxar(svarxml);

            prov gjortprov = HittaSvar(provet);

            var tuple2 = RattaProv(gjortprov, visagammalt);
            prov facit = tuple2.Item1;
            int resultat = tuple2.Item2;
            int produkterochhanteringavkundensaffärer = tuple2.Item3;
            int ekonominationalekonomifinansiellekonomiochprivatekonomi = tuple2.Item4;
            int etikochregelverk = tuple2.Item5;

            VisaSvar(facit, resultat, produkterochhanteringavkundensaffärer, ekonominationalekonomifinansiellekonomiochprivatekonomi, etikochregelverk);

            HideAll();
            btnStart.Visible = true;
            Repeater1.Visible = true;
            //btnSeResultatAnstallda.Visible = false;
            //btnSeResultat.Visible = false;
        }
        //  När man klickar på "Starta provet".
        protected void btnStartaprov_Click(object sender, EventArgs e)
        {
            string xmlpath = Server.MapPath("fragor.xml");

            string xml;
            using (StreamReader reader = new StreamReader(xmlpath))
            {
                xml = reader.ReadLine();
            }

            int person_id = HamtaID2();
            prov prov = new prov();

            if (SenasteProv(person_id))     // Returnerar en boolean som berättar om man gjort provet tidigare.  Om man gjort prov tidigare så är satsen true
            {
                prov = HamtaFragorLicensierad();
                Repeater1.DataSource = prov.fragelista;
                Repeater1.DataBind();
            }

            else                     // Om man inte gjort provet tidigare       TOLKAR JAG DETTA RÄTT???? SKALL DET INTE VARA OM MAN HAR ETT FÖR GAMMALT PROV ELLER EJ GJORT DET ALLS?
            {
                prov = HamtaFragor();    // Skriver ut frågelistan i Repeater1. Se repeatern i "default.aspx"
                Repeater1.DataSource = prov.fragelista;
                Repeater1.DataBind();
            }

            HideAll();
            btnLamnain.Visible = true;
            Repeater1.Visible = true;

            //    btnStartaprov.Visible = false;                 // Gömmer undan Starta Prov-knappen
            //btnSeResultat.Visible = false;                      // Gömmer "Visa tidigare"-knappen
        }
        protected void btnLamnain_Click(object sender, EventArgs e)
        {
            string xml = Server.MapPath("fragor.xml");
            int person_id = HamtaID2();   // Returnerar id-nummer på användaren som är inloggad
            bool visagammalt = false; //Hade gjort så att funktionen RattaProv slutar vid 15 frågor om man gjort prov tidigare. Problemet är att om man kör den via visa gamla prov så stannar den ju vid 15 fast det gamla provet kan ha 25 frågor. Alltså skickar jag bara in en variabel också och gör det enkelt för mig

            prov provet = new prov();

            if (SenasteProv(person_id))     // Returnerar en boolean som berättar om man gjort provet tidigare
            {
                provet = HamtaFragorLicensierad();    //Skapar ett prov bestående av 15 frågeobjekt av utvald kategori
            }

            else
            {
                provet = HamtaFragor();
            }

            prov gjortprov = HittaSvar(provet);
            SerializaSvar(gjortprov);

            var tuple = RattaProv(gjortprov, visagammalt);
            prov facit = tuple.Item1;
            int resultat = tuple.Item2;
            int produkterochhanteringavkundensaffärer = tuple.Item3;
            int ekonominationalekonomifinansiellekonomiochprivatekonomi = tuple.Item4;
            int etikochregelverk = tuple.Item5;

            bool godkand = VisaSvar(facit, resultat, produkterochhanteringavkundensaffärer, ekonominationalekonomifinansiellekonomiochprivatekonomi, etikochregelverk);

            // Ersätta med tabell kanske samt att man kanske ska hämta anta frågor ur varje kategori ur xml istället
            int totalt = 25;
            int totaltkategori1 = 8;
            int totaltkategori2 = 8;
            int totaltkategori3 = 9;

            if (SenasteProv(person_id))
            {
                totalt = 15;
                totaltkategori1 = 5;
                totaltkategori2 = 5;
                totaltkategori3 = 5;
            }

            if (godkand)
            {
                LabelKompetensportal.Text = "Grattis du har klarat kompetenstestet! Ditt resultat är " + resultat + " av " + totalt + ". " + produkterochhanteringavkundensaffärer + " av " + totaltkategori1 + " inom kategorin Produkter och hantering av kundens affärer. " + ekonominationalekonomifinansiellekonomiochprivatekonomi + " av " + totaltkategori2 + " inom Ekonomi - Nationalekonomi, finansiell enkonomi och privatekonomi. " + etikochregelverk + " av " + totaltkategori3 + " i kategorin Etik och regelverk";
            }

            else
            {
                LabelKompetensportal.Text = "Du har tyvärr inte klarat kompetenstestet. Ditt resultat är " + resultat + " av " + totalt + ". " + produkterochhanteringavkundensaffärer + " av " + totaltkategori1 + " inom kategorin Produkter och hantering av kundens affärer. " + ekonominationalekonomifinansiellekonomiochprivatekonomi + " av " + totaltkategori2 + " inom Ekonomi - Nationalekonomi, finansiell enkonomi och privatekonomi. " + etikochregelverk + " av " + totaltkategori3 + " i kategorin Etik och regelverk";
            }

            SparaTest(resultat, totalt, produkterochhanteringavkundensaffärer, ekonominationalekonomifinansiellekonomiochprivatekonomi, etikochregelverk, godkand);

            HideAll();

            //btnGorProv.Visible = false;
            //btnLamnain.Visible = false;
            //btnSeResultat.Visible = false;
            //btnSeResultatAnstallda.Visible = false;
            LabelKompetensportal.Visible = true;
            btnStart.Visible = true;
            Repeater1.Visible = true;
        }