// <!--
var mistakeduration = 4000;
var speedMin = 1000;
var speedMax = 300;
var chance = 13; // k*2 + 1 > 2. propability  mistake: 1/chance, left,right: 2/(chance-1)
var preloadAllImages = true;
var preloadTypes = new Array('normal', 'left', 'right', '7left', '7right', 'mistake', 'reversed', 'crouch', 'crouch_reversed');
var useSkipping = true;
var skipchance = 2; // propability skip: 1/(chance*skipchance), else: mistake
var skip = new Array('reversed', 'crouch', 'crouch_reversed');
var imgheight = 120;
var imgwidth = 56;
//var basepath = "";
var basepath = "/wp-content/sieben/";

var keys = new Object();
keys['left'] = 'l';
keys['right'] = 'r';
keys['7left'] = '7l';
keys['7right'] = '7r';
keys['mistake'] = 'w';
keys['normal'] = 'n';
keys['reversed'] = 'vn';
keys['crouch'] = 'h';
keys['crouch_reversed'] = 'vh';

var p1 = new Object();
p1['name'] = "tim";
p1['left'] = 3;
p1['right'] = 3;
p1['7left'] = 3;
p1['7right'] = 3;
p1['mistake'] = 2;
p1['normal'] = 1;
p1['reversed'] = 1;
p1['crouch'] = 1;
p1['crouch_reversed'] = 1;

var p2 = new Object();
p2['name'] = "jan";
p2['left'] = 2;
p2['right'] = 2;
p2['7left'] = 2;
p2['7right'] = 2;
p2['mistake'] = 1;
p2['normal'] = 1;
p2['reversed'] = 1;
p2['crouch'] = 1;
p2['crouch_reversed'] = 1;

var p3 = new Object();
p3['name'] = "tobias";
p3['left'] = 2;
p3['right'] = 2;
p3['7left'] = 1;
p3['7right'] = 1;
p3['mistake'] = 1;
p3['normal'] = 1;
p3['reversed'] = 1;
p3['crouch'] = 1;
p3['crouch_reversed'] = 1;

var p4 = new Object();
p4['name'] = "harald";
p4['left'] = 2;
p4['right'] = 2;
p4['7left'] = 2;
p4['7right'] = 2;
p4['mistake'] = 4;
p4['normal'] = 1;
p4['reversed'] = 1;
p4['crouch'] = 1;
p4['crouch_reversed'] = 1;

var p5 = new Object();
p5['name'] = "fredanko";
p5['left'] = 3;
p5['right'] = 3;
p5['7left'] = 2;
p5['7right'] = 2;
p5['mistake'] = 2;
p5['normal'] = 1;
p5['reversed'] = 1;
p5['crouch'] = 1;
p5['crouch_reversed'] = 1;

var p6 = new Object();
p6['name'] = "juergen";
p6['left'] = 3;
p6['right'] = 3;
p6['7left'] = 1;
p6['7right'] = 1;
p6['mistake'] = 1;
p6['normal'] = 1;
p6['reversed'] = 1;
p6['crouch'] = 1;
p6['crouch_reversed'] = 1;

var p7 = new Object();
p7['name'] = "melanie";
p7['left'] = 1;
p7['right'] = 1;
p7['7left'] = 1;
p7['7right'] = 2;
p7['mistake'] = 1;
p7['normal'] = 1;
p7['reversed'] = 1;
p7['crouch'] = 1;
p7['crouch_reversed'] = 1;

var p8 = new Object();
p8['name'] = "nicole";
p8['left'] = 2;
p8['right'] = 2;
p8['7left'] = 2;
p8['7right'] = 2;
p8['mistake'] = 2;
p8['normal'] = 1;
p8['reversed'] = 1;
p8['crouch'] = 1;
p8['crouch_reversed'] = 1;

var loadImage = new Image();
var allImages = new Array();
var players = new Array(p1, p2, p3, p4, p5, p6, p7, p8);

for(var i = 1; i <= players.length; ++i) {
  document.writeln('<img name="img_7_p' + i + '" id="img_7_p' + i + '" src="" height="' + imgheight + '" width="' + imgwidth + '" style="padding:0pt;margin:0pt;" />');
}

var images = new Array(document['img_7_p1'], document['img_7_p2'], document['img_7_p3'], document['img_7_p4'], document['img_7_p5'], document['img_7_p6'], document['img_7_p7'], document['img_7_p8']);

for(var k = 0; k < 2; ++k) {
  for(var i = 0; i < players.length-1; ++i) {
    var j = Math.floor(Math.random()*(players.length-i-1)+i+1);
    var buf = players[i];
    players[i] = players[j];
    players[j] = buf;
  }
}

var oldposition = -1;
var position = Math.floor(Math.random()*players.length);
var direction = 0;
var counter = 0;
var countUpTo = 7;
var mistake = new Array();
var mistakelist = new Array();

if(chance <= 2) {
  chance = 3;
} else if(chance % 2 == 0) {
  ++chance;
}

if(typeof(skip) != "object" || skip.length == 0) {
  useSkipping = false;
}
if(skipchance <= 2) {
  skipchance = 3;
} else if(skipchance % 2 == 0) {
  ++skipchance;
}

for(var i = 0; i < players.length; ++i) {
  imagesource(i, 'normal');
  images[i].alt = players[i]['name'];
  mistake[i] = false;
}

function nextTurn() {
  var dir = Math.floor(Math.random()*chance);
  ++counter;
  if(dir < (chance-1)/2) { // left
    direction = -1;
    if(counter < countUpTo) {
      imagesource(position, 'right');
    } else {
      imagesource(position, '7right');
      counter = 0;
    }
    
  } else if(dir == chance-1 && direction != 0) { // mistake or skip
    mistake[position] = true;
    if(useSkipping && Math.floor(Math.random()*skipchance) < (skipchance -1) / 2) {
      imagesource(position, skip[Math.floor(Math.random()*skip.length)]);
    } else { // mistake
      imagesource(position, 'mistake');
      counter = 0;
    }
    mistakelist.push(position);
    window.setTimeout("clearmistake()", mistakeduration);

  } else { // right
    direction = 1;
    if(counter < countUpTo) {
      imagesource(position, 'left');
    } else {
      imagesource(position, '7left');
      counter = 0;
    }
    
  }
  if(oldposition >= 0 && !mistake[oldposition]) {
    imagesource(oldposition, 'normal');
  }
  oldposition = position;
  calcPos();
}

function calcPos() {
  if(direction < 0 && position == 0) {
    position = players.length-1;
  } else if(direction > 0 && position == players.length-1) {
    position = 0;
  } else {
    position += direction;
  }
  if(mistake[position]) {
    window.setTimeout("calcPos()", 50);
  } else {
    window.setTimeout("nextTurn()", Math.floor(Math.random()*(speedMin-speedMax+1)+speedMax));
  }
}

function clearmistake() {
  if(mistakelist.length > 0) {
    var pos = mistakelist.shift();
    imagesource(pos, 'normal');
    mistake[pos] = false;
  }
}

function prebufferImages() {
  for(type in preloadTypes) {
    for(var p = 0; p < players.length; ++p) {
      var count = players[p][type];
      for(i = 0; i < count; ++i) {
        var img = new Image();
        img.src = basepath + players[p]['name'] + '_' + keys[type] + '_' + i + '.jpg'
        allImages.push(img);
      }
    }
  }
}

function imagesource(p, type) {
  loadImage.src = basepath + players[p]['name'] + '_' + keys[type] + '_' + Math.floor(Math.random()*players[p][type]) + '.jpg';
  waitForImage();
  images[p].src = loadImage.src;
}

function waitForImage() {
  if(!loadImage.complete) {
    window.setTimeout("waitForImage()", 50);
  }
}

// start game
nextTurn();

if(preloadAllImages) {
  // start buffering in different thread
  window.setTimeout("prebufferImages()", 50);
}
// -->