//Rätsel erweiterbar durch hizufügen weiterer Felder

var sudokus = new Array();
sudokus[0] = [0,8,0,1,0,0,0,0,0,
	     0,9,0,6,2,0,8,1,0,
              0,0,0,0,0,0,9,5,4,
              8,4,0,7,0,0,0,9,0,
              3,7,0,0,0,0,5,0,0,
              0,0,1,0,5,0,6,0,0,
              1,0,7,0,0,0,0,2,6,
              0,0,9,2,0,0,3,0,0,
              0,0,0,0,6,4,0,7,0];

sudokus[1] = [9,0,0,3,0,0,0,1,0,
	     7,0,0,5,0,0,0,8,0,
              2,0,0,6,0,0,0,5,0,
              0,0,5,0,4,0,2,7,0,
              0,0,9,0,7,0,6,0,0,
              0,7,3,0,9,0,5,0,0,
              0,6,0,0,0,1,0,0,5,
              0,9,0,0,0,8,0,0,7,
              0,4,0,0,0,2,0,0,3];

sudokus[2] = [0,0,0,0,0,4,2,1,0,
	     4,0,0,0,0,7,0,0,5,
              6,0,0,0,0,2,0,4,0,
              0,3,0,0,0,0,0,8,6,
              0,2,1,4,0,0,0,0,3,
              0,0,0,8,0,0,0,0,0,
              0,0,3,6,1,0,0,0,0,
              0,5,4,0,3,0,0,0,0,
              0,0,0,0,0,0,5,0,9];

sudokus[3] = [0,0,0,1,0,9,0,0,0,
	     3,0,7,0,0,0,0,0,0,
              0,0,0,4,0,0,1,0,2,
              1,5,0,0,0,0,0,0,7,
              0,0,6,0,3,0,0,2,0,
              0,7,0,0,5,0,8,3,0,
              0,0,0,0,0,0,9,5,8,
              9,8,2,0,0,5,0,4,0,
              0,0,0,9,0,6,0,0,0];

sudokus[4] = [0,0,5,0,8,2,1,0,0,
	     0,0,0,0,0,0,7,0,0,
              9,0,4,0,5,0,0,0,0,
              0,8,0,0,6,0,0,0,3,
              0,9,0,3,0,0,0,0,4,
              0,4,0,9,0,0,0,0,2,
              3,6,0,0,0,9,0,0,0,
              4,0,2,0,0,5,0,0,0,
              0,0,0,0,0,1,0,2,8];
//Ende Felder

var imgSrcPre = "/site/de/service/gesundheitstests/sandoku/img/";
var imgPostfix = ".jpg";
var actualState = new Array();

function initialize(){
  //Message-Feld initialisieren
   var message = $('messageArea');
   message.innerHTML="";

  //zufälliges Rätsel auswählen
  var sudokuIndex = 0;
  sudokuIndex = Math.round(Math.random() * sudokus.length);
  if (sudokuIndex == sudokus.length){
      --sudokuIndex;
  }
  var loadedSudoku = sudokus[sudokuIndex];
  actualState = new Array();
  actualState = actualState.concat(loadedSudoku);

  var area = $('editArea')
  Element.hide(area)
  if(area.cell != null){
        area.cell.style.border = "1px solid #003366"
  }


  //Spielfeld befüllen
  for( var i = 1; i <= 81; i++){
    if(loadedSudoku[i-1]==0){
      var emptyPicture = document.getElementById("bild" + i);
      emptyPicture.src= imgSrcPre + 'leer.png';
      emptyPicture.alt = 'Hier klicken';
      emptyPicture.onclick = fClick;
    }else{
      var tempBild = document.getElementById("bild" + i);
      tempBild.src= imgSrcPre + 'b' + loadedSudoku[i-1] + '2' + imgPostfix;
      tempBild.alt = '';
      tempBild.onclick = null;      //var elm = tempBild.parentNode;
      //elm.style.border = "solid #a78200 1px"
    }
  }
}

var fClick = function(evt) {
      evt = evt || window.event
      var elm = Event.findElement(evt,'td')
      if (!elm) return;

      var pt = Position.page($('spaceToEditArea'))
      var area = $('editArea')
      area.style.left=10 + pt[0]+'px'
      area.style.top=pt[1]+'px'


      if(area.cell != null){
        area.cell.style.border = "1px solid #003366"
      }
      elm.style.border = "solid yellow 1px"
      area.cell = elm

      new Effect.Appear(area,{duration:0.5 })
      return false
};

function selectNum(arg){
      var area = $('editArea')
      if(arg==0){
        area.cell.firstChild.src= imgSrcPre + "leer.png"
      }else{
        area.cell.firstChild.src= imgSrcPre + "b" + arg + "1" + imgPostfix
      }
      area.cell.style.border = "1px solid #003366"

      var fieldId = area.cell.id.substring(4);
      actualState[fieldId-1] = arg;
      Element.hide(area)
      checkReady();
      return
};

function checkReady(){
      var ready = true;
      var message = $('messageArea');
      for(var r=0;r<81;r++){
      	if(actualState[r] == 0){
           ready=false;
         }
      }
      if(ready){
        checkCorrect();
      }else{
        message.innerHTML="";
      }
}

function checkCorrect(){
      var correct = true;
      var message = $('messageArea')
      var row = new Array();
      var col = new Array();
      //var block = new Array();

      //Prüfroutine: Zerlegung des Feldes in Zeilen und Spalten
      for(var rowIndex = 0; rowIndex<9 ; rowIndex++){
        if(!correct) break;
        for(var colIndex = 0; colIndex<9 ; colIndex++){
          row[colIndex] = actualState[rowIndex*9 + colIndex];
          col[colIndex] = actualState[colIndex*9 + rowIndex];
          //block[colIndex] = actualState[colIndex + rowIndex*3];
        }
        if(!isPackCorrect(row) || !isPackCorrect(col)){
          correct = false;
          break;
        }
      }


      if(correct){
        message.innerHTML="Alles richtig! Super!";
      }else{
        message.innerHTML="Es gibt noch Fehler in Ihrer L&ouml;sung!";
      }
}

function isPackCorrect(pack){
      var isCorrect = true;

      pack.sort();
      for(var b = 0; b<9 ; b++){
        if(pack[b] != b+1){
          isCorrect = false;
        }
      }

      return isCorrect;
}