var aTimer_items = new Array();
var iTimer_interval = 20; //1sec/40ms = 25fps | 1sec/20ms = 50fps
var iTimer_nextTick;
var iTimer_timeoutId;
    
function timer_tick(iNum){
  var sCmd;
  var iTmp = 0;
  var iTim = new Date().getTime();
  iTimer_nextTick = iTim + iTimer_interval;
  //aflopend tellen (voor als er een element gewist moet worden)
  for(var i=aTimer_items.length-1; i>=0; i--){
    sCmd = '';
    try{
      sCmd = aTimer_items[i][1];
      aTimer_items[i][4] ++;
      eval(sCmd);
    }catch(e){
      try{
        window.status = 'timer_tick(' + iNum + '), error: ' + sCmd;
      }catch(ee){}
    }
    iTmp = aTimer_items[i][3];
    if(iTmp > 0 && iTmp <= iTim){
      timer_remove(aTimer_items[i][0]);
    }
  }
  
  iTim = new Date().getTime();
  iTmp = iTimer_nextTick - iTim;
  if(iTmp < 1){
    iTmp = 1;
    iTimer_nextTick = iTim + iTmp;
  }
  iTimer_timeoutId = setTimeout('timer_tick(' + (iNum + 1) + ');', iTmp);
}

function timer_add(name, command, maxMiliSecondsOptional, itemObjectOptional){
  try{
    clearTimeout(iTimer_timeoutId);
    
    var iNow = new Date().getTime();
    var endTime = 0;
    if(!isNaN(maxMiliSecondsOptional)){
      endTime = maxMiliSecondsOptional + iNow; //(iNow + maxMiliSeconds);
    }
    //                new Array(naam, command, startTijd, eindTijd, teller))
    aTimer_items.push(new Array(name, command, iNow, endTime, 0, itemObjectOptional));
  }catch(e){}
  if(aTimer_items.length > 0){
    //timer_start BEGIN
    var iTim = new Date().getTime();
    var iTmp = iTimer_nextTick - iTim;
    if(iTmp < 1){
      iTmp = 1;
      iTimer_nextTick = iTim + iTmp;
    }else if(iTmp > iTimer_interval){
      iTmp = iTimer_interval;
      iTimer_nextTick = iTim + iTmp;
    }
    iTimer_timeoutId = setTimeout('timer_tick(0);', iTmp);
    //timer_start END
  }
}

function timer_item(name){
  for(var i=0; i<aTimer_items.length; i++){
    if(aTimer_items[i][0] == name){
      return aTimer_items[i];
    }
  }
  return null;
}

function timer_remove(name){
  for(var i=0; i<aTimer_items.length; i++){
    if(aTimer_items[i][0] == name){
      for(i=i; i+1<aTimer_items.length; i++){
        aTimer_items[i] = aTimer_items[i+1];
      }
      aTimer_items.pop();
    }
  }
  if(aTimer_items.length <= 0){
    clearTimeout(iTimer_timeoutId);
  }
}

function timer_duration(initTime){
  return (new Date().getTime() - initTime);
}
/* script timer */

//main_log('timer ingeladen');