/**************************************************/
/* Funktionen die per Mausklick aufgerufen werden */
/**************************************************/
function selectFruit(num) {
         if( ! hasBeginn ) {
             alert("klicken sie zunächst\nauf \"neu beginnen\"");
             return;
         }
         if( getxy(0,0,selectionField) != num ) {
            setxy(0,0,selectionField,num);
         } else {
            setxy(0,0,selectionField,12);
         }
}

function setFruit(x,y) {
         if( ! hasBeginn ) {
             alert("klicken sie zunächst\nauf \"neu beginnen\"");
             return;
         }
         selNum = getxy(0,0,selectionField);
         mainNum = getxy(x,y,mainField)
         if( y != actRow ) return;
         if( selNum > 5 || mainNum == selNum ) {
            setxy(x,y,mainField,8);
            return;
         }
         setxy(x,y,mainField,selNum);
         if( checkIfRowIsFull() ) {
            if( showStat() ) {
                endGame();
                return;
            }
            nextRow();
         }
}

/****************************************************/
/* Funktionen zur initialisierung und zur Steuerung */
/****************************************************/
function init() {
        for(zeile=0; zeile<C_ROW; zeile++){
           for(spalte=0; spalte<C_COL; spalte++){
               gsetxy(spalte,zeile,mainField,leer);
               gsetxy(spalte,zeile,littleField,lklein);
           }
        }
        for(spalte=0; spalte<C_COL; spalte++){
               gsetxy(spalte,0,questionField,frage);
        }
        gsetxy(0,0,selectionField,auswahl);
        //die zu erratene Folge bestimmen
        for(spalte=0; spalte<C_COL; spalte++){
            ranNum = Math.floor(Math.random()*6)
            if( ranNum > 5 ) ranNum = 6;
            basket[spalte] = ranNum;
        }
        actRow = 8;
        hasBeginn = true;
        nextRow();
}

function gameLost() {
         showSolution();
         alert("das spiel ist zu ende.\n\nsie haben die früchte im\nkorb leider nicht bestimmt!")
         hasBeginn = false;
}

function endGame() {
         showSolution();
         alert("glückwunsch!\n\nsie haben die früchte im korb\n mit "+(8-actRow)+" versuch(en) bestimmt")
         hasBeginn = false;
}

function showStat() {
        //zähle zunächst wie viele genau übereinstimmen oder wenigsten vorhanden sind
        countExact=0; countRight=0;
        for(basketIdx=0; basketIdx<C_COL; basketIdx++){
           basketNum = basket[basketIdx];
           mainNum = getxy(basketIdx,actRow,mainField);
           if( basketNum == mainNum) countExact++;
        }
        countFruits = new Array(0,0,0,0,0,0);
        for( fruitIdx=0; fruitIdx < 6; fruitIdx++) {
             // zähle Frucht Idx im Korb
             countBasket = 0;
             for(basketIdx=0; basketIdx<C_COL; basketIdx++){
                if( basket[basketIdx] == fruitIdx ) countBasket++;
             }
             // zähle Frucht in Main
             countMain = 0;
             for(mainIdx=0; mainIdx<C_COL; mainIdx++){
                if( getxy(mainIdx,actRow,mainField) == fruitIdx ) countMain++;
             }
             if( countBasket != 0 ) countFruits[fruitIdx]=Math.min(countMain,countBasket);
        }
        for(fruitIdx=0; fruitIdx<6; fruitIdx++){
             countRight += countFruits[fruitIdx]
        }
        countRight -= countExact;
        if( countRight < 0 ) countRight = 0;
        for( spalte = 0; spalte < (countExact+countRight); spalte++ ) {
             if( spalte >= countExact ) {
              setxy(spalte,actRow,littleField,10)
             } else {
              setxy(spalte,actRow,littleField,11)
             }
        }
        if( countExact == 4 ) {
            return true;
        } else {
            return false;
        }
}

function showSolution() {
        for(spalte=0; spalte<C_COL; spalte++){
            setxy(spalte,0,questionField,basket[spalte])
        }
}

function nextRow() {
        if( actRow == 0 ) {
            gameLost();
            return;
        }
        actRow--;
        for(spalte=0; spalte<C_COL; spalte++){
               gsetxy(spalte,actRow,mainField,setzen);
        }
}

function checkIfRowIsFull() {
        rValue = true;
        for(spalte=0; spalte<C_COL; spalte++){
             mainNum = getxy(spalte,actRow,mainField);
             if( mainNum == 8 ) rValue = false;
        }
        return rValue;
}

/******************************************/
/*** Funktionen zur graphischen Ausgabe ***/
/******************************************/
function getxy(x,y,myField) {
   myImg = ggetxy(x,y,myField);
   if( myImg.src.indexOf(bananeImg) != -1 ) return 0;
   if( myImg.src.indexOf(apfelImg) != -1 ) return 1;
   if( myImg.src.indexOf(kiwiImg) != -1 ) return 2;
   if( myImg.src.indexOf(zitroneImg) != -1 ) return 3;
   if( myImg.src.indexOf(traubeImg) != -1 ) return 4;
   if( myImg.src.indexOf(orangeImg) != -1 ) return 5;
   if( myImg.src.indexOf(frageImg) != -1 ) return 6;
   if( myImg.src.indexOf(leerImg) != -1 ) return 7;
   if( myImg.src.indexOf(setzenImg) != -1 ) return 8;
   if( myImg.src.indexOf(lkleinImg) != -1 ) return 9;
   if( myImg.src.indexOf(skleinImg) != -1 ) return 10;
   if( myImg.src.indexOf(wkleinImg) != -1 ) return 11;
   if( myImg.src.indexOf(auswahlImg) != -1 ) return 12;
}

function ggetxy(x,y,myField) {
     /* setzt ein bild an die stelle (x,y) (0,0) ist oben links (xmax,ymax) ist unten rechts */
    if( x < 0 || x > (C_COL-1) || y < 0 || y > (C_ROW-1) ) return;
    myOffset = parseInt(x) + parseInt(y) * parseInt(C_COL);
    return document.images[myField + myOffset];
}

function setxy(x,y,myField,num) {
         gsetxy(x,y,myField,allImg[num])
}

function gsetxy(x,y,myField,img) {
     /* setzt ein bild an die stelle (x,y) (0,0) ist oben links (xmax,ymax) ist unten rechts */
    if( x < 0 || x > (C_COL-1) || y < 0 || y > (C_ROW-1) ) return;
    myOffset = parseInt(x) + parseInt(y) * parseInt(C_COL);
     document.images[myField + myOffset].src=img.src;
}
