function TestLogic()
{
  this.count = 0;
  this.wSet  = set('1-2', '1-3', '1-4', '1-5'); 
  this.gSet  = set('5-1', '5-2', '5-3');
  this.lSet  = set('5-4', '5-6', '5-7', '5-5');
  this.WKIND = 0;
  this.GKIND = 1;
  this.LKIND = 2;
  this.lastModified = null;
}
TestLogic.prototype = 
{
  alreadyDone: [],
  getThemeTest: function(exCount)
  {
    testlogic.alreadyDone = [];
    this.count = exCount;
    
    var test = 
    {
      exercises: [],
      idxs: [],
      rec: [],
      record : function(ans,cor)
      {
        rec.push({ans:ans,cor:cor});
      }
    }
    var w=0, g=0, l=0, s=0;
    while(test.exercises.length < exCount)
    {
      var et = null;
      if(exCount == 24) // dus eindtoets
      {
        et           = top.userData.themes[randomThemeId()];
        var re       = getRandom(et.exercises.length);
        var exercise = et.exercises[re];
      }
      else if(top.theme)
      {
        et           = top.theme;
        var re       = getRandom(top.theme.exercises.length);
        var exercise = top.theme.exercises[re];
      }
      
      exercise.themeid = et.id;
      var curr = w+g+l+s;
      switch(true)
      {
        case exercise.type in this.wSet:
          if(w < (exCount/4))
          {
            w++;
            this.lastModified = this.WKIND;
          }
          break;
        case exercise.type in this.gSet:
          if(g < (exCount/4))
          {
            g++;
            this.lastModified = this.GKIND;
          }
          break;
        case exercise.type in this.lSet:
          if(l < (exCount/2))
          {
            l++;
            this.lastModified = this.LKIND;
          }
          break;
        default:
          continue;
          break;
      }
      
      if(curr != w+g+l+s) // voor de zekerheid
      {
        exercise.subtype = (exercise.subtype == 'c' || exercise.subtype == 'testc' ? 'testc' : 'test');              

        var idx = testlogic.getIdx(exercise);
        if(idx === false)
        {
          switch(this.lastModified)
          {
            case this.WKIND: w--; break;
            case this.GKIND: g--; break;
            case this.LKIND: l--; break;
          }
          continue;
        }
        else
        {    
          test.idxs.push(idx);
          test.exercises.push(exercise);
        }
      }
    }
    return test;
  },

  getIdx: function(exrc)
  {
    var idx = null;
    while(idx == null || idx == 'undefined')
    {
      idx = getRandom(exrc.idxs.length);
    }
    
    if(testlogic.checkAlreadyDone(exrc.themeid,exrc.type,exrc.idxs,idx) == false)
    {
      testlogic.alreadyDone.push({themeid:exrc.themeid,type:exrc.type,idxs:exrc.idxs,idx:idx});
      return idx;
    }
    return false;
  },

  checkAlreadyDone: function(themeid,type,idxs,idx)
  {
    if(testlogic.alreadyDone.length == 0) return false;

    for(var i=0; i < testlogic.alreadyDone.length; i++)
    {
      var item = testlogic.alreadyDone[i];
      if(item.themeid == themeid && item.type == type && item.idxs.join() == idxs.join() && item.idx == idx)
        return true;
    }
    
    return false;
  },

  doNextTestExercise: function(idx)
  {
    if(idx == this.count)
    {
      if(this.count == 8)
        window.frames.content.document.location.href = '/code/toetsresultaten.html';
      if(this.count == 24)
        window.frames.content.document.location.href = '/code/lesoverzicht.html?test='+getTestResultString(getWrongCount());
    }
    else
    { 
      if(this.count == 24)
        top.setTheme(top.test.exercises[idx].themeid);
      
      window.frames.content.document.location.href = '/code/exercise' + top.test.exercises[idx].type + '.html?test='+idx;
    }
  }
};
var testlogic = new TestLogic();
var test      = null;

function set()
{
  var result = {};
  for (var i=0; i < arguments.length; i++)
    result[arguments[i]] = true;
  return result;
}

function getRandom(mp)
{
  return Math.floor(mp*Math.random());
}

function randomThemeId()
{
  var thids = ['wateenmooihuis', 'dagbuurvrouw', 'magikditruilen', 'dokterikbenziek', 'sorryikmeldmijziek', 'vrijwilligerjaleuk', 'eenbriefvanschool', 'waarisdesupermarkt', 'opcursus', 'hoewerktditapparaat', 'watvindjevandecursus', 'naardebibliotheek'];
  return thids[getRandom(12)];  
}
