      var field = new Array(); // ... enthaelt stets die aktuelle Belegung
      var empty  ;             // Position des leeren Feldes
      var empty0 ;             // Position des leeren Startfeldes
      var fill  = true ;
      var imgname ;
      var finishsc = false ;
      var emptypos = 15 ;
      var whstring = "" ;
      // Function start() initialisiert das Spielfeld durch
      // zufaelliges Verteilen der 15 Objekte auf die Felder.
      function start(imgfile , imgw , imgh , finishscript , emptyfield) {
        imgname  = imgfile ;
        if (arguments.length > 2 && imgw > 0)
             whstring = ' width="' + imgw + '" heigth="' + imgh + '"' ;
        if (arguments.length > 3) finishsc = finishscript ;
        if (arguments.length > 4) emptypos = emptyfield ;
        // Liste aller Namen der Tabellenzellen:
        var felder = new Array();
        for (var i = 0; i <= 15; i++) {
          felder[i] = "cell" + i;
          field [i] = i ;          // field[0] ... field[14] = 0 ... 14
        }
        for (var i = 0; i <= 15; i++) {
          document.getElementById(felder[i]).innerHTML =
                                '<img src="'+imgname+i+'.jpg"' + whstring + '>' ;
        }
        // Das leere Feld:
        if (emptypos > 15) {
           empty = Math.floor(Math.random() * 12) ;
           if (empty > 7) empty = Math.floor(Math.random() * 12) ;
           if (empty > 7) empty = Math.floor(Math.random() * 12) ;
        }
        else empty = emptypos ;

        empty0 = empty ;
        document.getElementById("cell" + empty).innerHTML = "";
        field [empty] = -1 ;       // -1 ist der Indikator fuer das leere Feld

        //Zufallsspielerei:
        fill = true ;
        dir  = new Array (-4 , -1 , 1 , 4) ;
        var newpos ;
        for (var i = 0; i < 1000 ; i++) {
           newpos = empty + dir[Math.floor(Math.random() * 4)] ;
           Move(newpos) ;
        }
        fill = false ;
      }

      function complpic (imgfile) {
        for (var i = 0; i <= 15; i++) {
          document.getElementById("cell" + i).innerHTML =
                           '<img src="'+imgfile+i+'.jpg"' + '>' ;
        }
      }

      // Felder benachbart?
      function neighbor (n , m) {             // m muss garantiert zwischen
        var diff = Math.abs(m-n);             // 0 und 15 liegen
        if (n > 15 || n < 0) return false ;   // Feld ausserhalb des Schemas
        if (diff == 4) return true ;          // Felder uebereinander
        if (diff != 1) return false ;
        else {                                // Felder eventuell nebeneinander
           if ((n + m == 7)  ||               // Felder in verschiedenen Zeilen
               (n + m == 15) || (n + m == 23)) return false ;
           else return true ;
        }
      }

      function complete () {
        for (var i = 0; i <= 15; i++) {
           if (field[i] != i) {
            if (field[i] != -1) return false ;
           }
        }
        return true ;
      }

      // Function Move verschiebt den Inhalt des
      // Feldes mit der Position pos in das leere Feld.
      function Move(pos) {
        // ... nur schieben, wenn Felder benachbart sind:
        if (neighbor (pos , empty)) {
          // Inhalt des angeklickten Feldes in das leere Feld
          // verschieben:
          var source = document.getElementById("cell" + pos)   ;
          var destin = document.getElementById("cell" + empty) ;
          Sarissa.moveChildNodes(source , destin , false) ;
          // Es gibt ein neues leeres Feld:
          field[empty] = field[pos] ;
          field[pos]   = -1 ;
          empty = pos ;
          if (empty == empty0 && !fill) {
            if (complete()) {
              document.getElementById("cell" + empty0).innerHTML =
                                 '<img src="'+imgname+empty0+'.jpg"' + whstring + '>' ;
              document.getElementById("cell" + 15).innerHTML =
                                 '<img src="'+imgname+'Fin.jpg"' + whstring + '>' ;
              if (finishsc) finish() ;
            }
          }
        }
      }
