﻿//skapar klass Kort
var Kort = function(värde, färg, håll, bild) {
    this.värde = värde;
    this.färg = färg;
    this.håll = håll;
    this.bild = bild;
}

// skapar kortlek med korten i ordning 1-13
var kortlek = [];

for (i = 1; i < 14; i++) {
    kortlek.push(new Kort(i, "hjärter", false, "hj" + i + ".png"));
    kortlek.push(new Kort(i, "ruter", false, "ru" + i + ".png"));
    kortlek.push(new Kort(i, "klöver", false, "kl" + i + ".png"));
    kortlek.push(new Kort(i, "spader", false, "sp" + i + ".png"));
}

//skapar spelare som har en korthand
var Spelare = function(hand) {
    this.hand = hand;
}

Spelare.prototype.visaHand = function() {
    return resultat(this);
};

var dragnaKort = 0;
var spelare1;
var datorspelare;
var drag = 0;

function randomSort() {
    return (Math.round(Math.random()) - 0.5);
}

//retunerar nästa kort i kortleken
function draKort() {
    if (dragnaKort < kortlek.length)
        return kortlek[dragnaKort];
    else
        return null;
}

//knapp och click -funktioner
$(function() {

    //inaktiverar ge kort knappen
    document.getElementById("btnGeKort").disabled = "disabled";    

    $('#btnNyttSpel').click(function() { nyttSpel(); });

    $('#cardHolder1').click(function() {
        hållKort(spelare1, this, 0);
    });
    $('#cardHolder2').click(function() {
        hållKort(spelare1, this, 1);
    });
    $('#cardHolder3').click(function() {
        hållKort(spelare1, this, 2);
    });
    $('#cardHolder4').click(function() {
        hållKort(spelare1, this, 3);
    });
    $('#cardHolder5').click(function() {
        hållKort(spelare1, this, 4);
    });

    $('#btnGeKort').click(function() {
        //loopar igenom och drar nya kort för dom som inte har håll
        for (i = 0; i < spelare1.hand.length; i++) {
            if (spelare1.hand[i].håll) {
                //sätter den till false igen ifall spelar vill spela nytt spel
                spelare1.hand[i].håll = false;
                //drar nytt kort som ersätter det gamla
                spelare1.hand[i] = draKort();
                $("#cardHolder" + (i + 1)).children('img:first').replaceWith("<img src=\"/Poker/spelkort/" + spelare1.hand[i].bild + "\" />");
                $("#cardHolder" + (i + 1)).children('.backcard').animate({ "top": '100px' }, 1500);
                dragnaKort++;
            }
        }
        for (i = 0; i < datorspelare.hand.length; i++) {
            if (datorspelare.hand[i].håll) {
                //sätter den till false igen ifall spelar vill spela nytt spel
                datorspelare.hand[i].håll = false;
                //drar nytt kort som ersätter det gamla
                datorspelare.hand[i] = draKort();
                dragnaKort++;
            }
        }

        drag++;
        if (drag == 2) {
            $('#resultatdiv').html("<h3>" + spelare1.visaHand() + "</h3>");
            $("#datorResultat").html(datorspelare.visaHand());
            //$().appendTo("#datorResultat");
            $('#cardHolder6').html("<img src=\"/Poker/spelkort/" + datorspelare.hand[0].bild + "\" />");
            $('#cardHolder7').html("<img src=\"/Poker/spelkort/" + datorspelare.hand[1].bild + "\" />");
            $('#cardHolder8').html("<img src=\"/Poker/spelkort/" + datorspelare.hand[2].bild + "\" />");
            $('#cardHolder9').html("<img src=\"/Poker/spelkort/" + datorspelare.hand[3].bild + "\" />");
            $('#cardHolder10').html("<img src=\"/Poker/spelkort/" + datorspelare.hand[4].bild + "\" />");
            //$("<h3>"+spelare1.visaHand()+"</h3>").prependTo("#resultatdiv");
            document.getElementById("btnGeKort").disabled = "disabled";

        }
    });

});

function nyttSpel() {
    $('.cardholder').children('.backcard').animate({ "top": '0px' }, 10);
    document.getElementById("btnGeKort").disabled = "";
    $('#resultatdiv').html("");
    drag = 0;
    dragnaKort = 0;
    //blandar kortleken med funktionen randomSort
    kortlek.sort(randomSort);
    var startHand = [];
    var datorHand = [];
    //drar 5 kort till första handen
    for (i = 0; i < 5; i++) {
        startHand.push(draKort());
        dragnaKort++;
        datorHand.push(draKort());
        dragnaKort++;
    }
    spelare1 = new Spelare(startHand);
    datorspelare = new Spelare(datorHand);
    visaKort();
    animeraKort();    
  
}

//visar spelarens kort
function visaKort() {
    $('#cardHolder1').children('img:first').replaceWith("<img src=\"/Poker/spelkort/" + spelare1.hand[0].bild + "\" />");
    $('#cardHolder2').children('img:first').replaceWith("<img src=\"/Poker/spelkort/" + spelare1.hand[1].bild + "\" />");
    $('#cardHolder3').children('img:first').replaceWith("<img src=\"/Poker/spelkort/" + spelare1.hand[2].bild + "\" />");
    $('#cardHolder4').children('img:first').replaceWith("<img src=\"/Poker/spelkort/" + spelare1.hand[3].bild + "\" />");
    $('#cardHolder5').children('img:first').replaceWith("<img src=\"/Poker/spelkort/" + spelare1.hand[4].bild + "\" />");
    
   }

//animerar korten i början
function animeraKort() {
    $('#cardHolder1').children('.backcard').animate({ "top": '100px' }, 1000, function() {
        $('#cardHolder2').children('.backcard').animate({ "top": '100px' }, 1000, function() {
            $('#cardHolder3').children('.backcard').animate({ "top": '100px' }, 1000, function() {
                $('#cardHolder4').children('.backcard').animate({ "top": '100px' }, 1000, function() {
                    $('#cardHolder5').children('.backcard').animate({ "top": '100px' }, 4000);
                });
            });
        });
    });

}

function hållKort(spl, selector, x) {
    if (spl.hand[x].håll) {
        spl.hand[x].håll = false;        
        $(selector).children('.backcard').animate({ "top": '100px' }, 10);                
    }
    else {
        spl.hand[x].håll = true;        
        $(selector).children('.backcard').animate({ "top": '0px' }, 10);
    }       
}

function sortera(a, b) {
    return (a.värde - b.värde) //vanlig sortering 
}

function resultat(spelarHand) {
    var poäng = "";
    //sorterar i nummerordrning
    spelarHand.hand.sort(sortera);

    //kollar först om det är färg
    var ärFärg = false;
    var xFärg = 0;
    for (i = 1; i < spelarHand.hand.length; i++) {
        if (spelarHand.hand[0].färg == spelarHand.hand[i].färg) {
            xFärg++;
        }
    }
    if (xFärg == 4) {
        ärFärg = true;
    }

    //kollar om det är stege
    var ärStege = false;
    if (((spelarHand.hand[4].värde - spelarHand.hand[3].värde) == 1 &&
    (spelarHand.hand[3].värde - spelarHand.hand[2].värde) == 1 &&
    (spelarHand.hand[2].värde - spelarHand.hand[1].värde) == 1) &&
    ((spelarHand.hand[1].värde - spelarHand.hand[0].värde) == 1 ||
    ((spelarHand.hand[1].värde - spelarHand.hand[0].värde) == 9 && spelarHand.hand[0].värde == 1))) {
        ärStege = true;
    }

    if (ärFärg || ärStege) {
        if (ärFärg && ärStege)
            poäng = 100;
        else if (ärFärg)
            poäng = 50;
        else
            poäng = 25;  
    }
    else {
        if ((spelarHand.hand[1].värde == spelarHand.hand[2].värde) &&
             (spelarHand.hand[1].värde == spelarHand.hand[3].värde) &&
             ((spelarHand.hand[1].värde == spelarHand.hand[4].värde) || (spelarHand.hand[1].värde == spelarHand.hand[0].värde))) {
            poäng = 10; //fyrtal
        }
        else if ((spelarHand.hand[0].värde == spelarHand.hand[1].värde) &&
             (spelarHand.hand[3].värde == spelarHand.hand[4].värde) &&
             ((spelarHand.hand[2].värde == spelarHand.hand[1].värde) || (spelarHand.hand[2].värde == spelarHand.hand[3].värde))) {
            poäng = 5;   // kåk
        }
        else if (((spelarHand.hand[0].värde == spelarHand.hand[1].värde) && (spelarHand.hand[1].värde == spelarHand.hand[2].värde)) ||
             ((spelarHand.hand[1].värde == spelarHand.hand[2].värde) && (spelarHand.hand[2].värde == spelarHand.hand[3].värde)) ||
             ((spelarHand.hand[2].värde == spelarHand.hand[3].värde) && (spelarHand.hand[3].värde == spelarHand.hand[4].värde))) {
            poäng = 3;   // triss
        }
        else if (((spelarHand.hand[0].värde == spelarHand.hand[1].värde) && (spelarHand.hand[2].värde == spelarHand.hand[3].värde)) ||
             ((spelarHand.hand[0].värde == spelarHand.hand[1].värde) && (spelarHand.hand[3].värde == spelarHand.hand[4].värde)) ||
             ((spelarHand.hand[1].värde == spelarHand.hand[2].värde) && (spelarHand.hand[3].värde == spelarHand.hand[4].värde))) {
            poäng = 2;   // två par
        }
        else {
            var antal = 0;
            var prev = spelarHand.hand[0].värde;
            for (i = 1; i < spelarHand.hand.length; i++) 
            {
                for(j=i;j<spelarHand.hand.length;j++)
                {
                    if(prev == spelarHand.hand[i].värde)
                    {
                    antal++;
                    }
                }
                prev = spelarHand.hand[i].värde;
            }
            if (antal > 0)
                poäng = 1;//ett par
        }
    }
    
    var värde ="";
    switch(poäng)
    {
    case 100:
      värde ="Grattis du fick straight flush!";
      break;    
    case 50:
      värde ="färg "+spelarHand.hand[0].färg;
      break;
    case 25:
      värde ="stege";
      break;
    case 10:
      värde = "fyrtal!!";
      break;
    case 5:
      värde = "kåk";
      break;
    case 3:
      värde = "triss";
      break;
    case 2:
      värde = "två par";
      break;
    case 1:
      värde = "ett par";
      break; 
  default:
      värde = "inget";
    }     
    return värde;
}




//datorns resultat

function resultatDator(spelarHand) {
    var poäng = "";
    //sorterar i nummerordrning
    spelarHand.hand.sort(sortera);

    //kollar först om det är färg
    var ärFärg = false;
    var xFärg = 0;
    var ejSamma = 0;
    for (i = 1; i < spelarHand.hand.length; i++) {
        if (spelarHand.hand[0].färg == spelarHand.hand[i].färg) {
            xFärg++;
        }
        else {
        ejSamma = i;
        }
    }
    if (xFärg == 4) {
        ärFärg = true;
    }

    //kollar om det är stege
    var ärStege = false;
    if (((spelarHand.hand[4].värde - spelarHand.hand[3].värde) == 1 &&
    (spelarHand.hand[3].värde - spelarHand.hand[2].värde) == 1 &&
    (spelarHand.hand[2].värde - spelarHand.hand[1].värde) == 1) &&
    ((spelarHand.hand[1].värde - spelarHand.hand[0].värde) == 1 ||
    ((spelarHand.hand[1].värde - spelarHand.hand[0].värde) == 9 && spelarHand.hand[0].värde == 1))) {
        ärStege = true;
    }

    if (ärFärg || ärStege) {
        if (ärFärg && ärStege)
            poäng = 100;
        else if (ärFärg)
            poäng = 50;
        else
            poäng = 25;
    }
    else {
        if ((spelarHand.hand[1].värde == spelarHand.hand[2].värde) &&
             (spelarHand.hand[1].värde == spelarHand.hand[3].värde) &&
             ((spelarHand.hand[1].värde == spelarHand.hand[4].värde) || (spelarHand.hand[1].värde == spelarHand.hand[0].värde))) {
            poäng = 10; //fyrtal
        }
        else if ((spelarHand.hand[0].värde == spelarHand.hand[1].värde) &&
             (spelarHand.hand[3].värde == spelarHand.hand[4].värde) &&
             ((spelarHand.hand[2].värde == spelarHand.hand[1].värde) || (spelarHand.hand[2].värde == spelarHand.hand[3].värde))) {
            poäng = 5;   // kåk
        }
        else if (((spelarHand.hand[0].värde == spelarHand.hand[1].värde) && (spelarHand.hand[1].värde == spelarHand.hand[2].värde)) ||
             ((spelarHand.hand[1].värde == spelarHand.hand[2].värde) && (spelarHand.hand[2].värde == spelarHand.hand[3].värde)) ||
             ((spelarHand.hand[2].värde == spelarHand.hand[3].värde) && (spelarHand.hand[3].värde == spelarHand.hand[4].värde))) {
            poäng = 3;   // triss
        }
        else if (((spelarHand.hand[0].värde == spelarHand.hand[1].värde) && (spelarHand.hand[2].värde == spelarHand.hand[3].värde)) ||
             ((spelarHand.hand[0].värde == spelarHand.hand[1].värde) && (spelarHand.hand[3].värde == spelarHand.hand[4].värde)) ||
             ((spelarHand.hand[1].värde == spelarHand.hand[2].värde) && (spelarHand.hand[3].värde == spelarHand.hand[4].värde))) {
            poäng = 2;   // två par
        }
        else {
            var antal = 0;
            var prev = spelarHand.hand[0].värde;
            for (i = 1; i < spelarHand.hand.length; i++) {
                for (j = i; j < spelarHand.hand.length; j++) {
                    if (prev == spelarHand.hand[i].värde) {
                        antal++;
                    }
                }
                prev = spelarHand.hand[i].värde;
            }
            if (antal > 0)
                poäng = 1; //ett par
        }
    }

    var värde = "";
    switch (poäng) {
        case 100:
            värde = "Grattis du fick straight flush!";
            break;
        case 50:
            värde = "färg " + spelarHand.hand[0].färg;
            break;
        case 25:
            värde = "stege";
            break;
        case 10:
            värde = "fyrtal!!";
            break;
        case 5:
            värde = "kåk";
            break;
        case 3:
            värde = "triss";
            break;
        case 2:
            värde = "två par";
            break;
        case 1:
            värde = "ett par";
            break;
        default:
            värde = "inget";
    }
    return värde;
}
