//*************************************************************************************************
//**  EventHandlerClass
//**  author: jack@inex.nl
//**  (c) 2004 InfoPinnacle BV.
//*************************************************************************************************

var theEventHandlerClass_Handler = null;
var theEventHandlerClass_Handler_TimerId=0;

function StartTimerCheckEvent(aEventHandler){
  theEventHandlerClass_Handler = aEventHandler;
  TimerCheckEvent();
}

function TimerCheckEvent(aEventHandler){
  var myRegEvents= theEventHandlerClass_Handler.GetRegistredEvents();   // possible events + actions
  var myQueue    = theEventHandlerClass_Handler.GetEventQueue ();        // triggered events
  var myInterval = theEventHandlerClass_Handler.GetEventInterval();

  theEventHandlerClass_Handler.Raise("MAINEVENT","TIMER","");
  
  for(var i=0;i<myQueue.length;i++){            // iterate true triggered events
    var found = false;
    for(var j=0;j<myRegEvents.length;j++){
      if(myRegEvents[j][0]==myQueue[i][0] && myRegEvents[j][1]==myQueue[i][1]){
        if(myQueue[i][2]!=undefined){
          eval(myRegEvents[j][2]+"('"+myQueue[i][0]+"','"+myQueue[i][2]+"');");               // event triggered, execute action
        }
        found=true;
      }
    }
    //if(debugMode && !found) alert( "Warning: event '"+myQueue[i][1]+"' is not a registred event");
  }
  theEventHandlerClass_Handler.SetEventQueue(new Array());      // reset triggered events queue
  clearTimeout(theEventHandlerClass_Handler_TimerId);
  theEventHandlerClass_Handler_TimerId=setTimeout("TimerCheckEvent()",myInterval);
}
  
function EventHandlerClass(){
  this.Init     = Init;
  this.Register = Register;
  this.Raise    = Raise;
  this.SetEventInterval   = SetEventInterval;
  this.GetEventInterval   = GetEventInterval;
  this.SetEventQueue      = SetEventQueue;
  this.GetEventQueue      = GetEventQueue;
  this.GetRegistredEvents = GetRegistredEvents;

  var theArrRegistredEvents;
  var theArrEventQueue;
  var theInterval;

  // Initialize eventHandler
  function Init(aInterval){
    theArrRegistredEvents = new Array();
    theArrEventQueue = new Array();
    if(aInterval>20)theInterval=aInterval; else theInterval=20;
    StartTimerCheckEvent(this);
  }

  //Register an event, given an eventname and an action (name of javascript function)
  function Register(aSource,aEvent,aAction){
    var myEvent = new Array(aSource,aEvent,aAction);
    theArrRegistredEvents.push(myEvent);
  } 

  //Raise an event (put in eventqueue)
  function Raise(aSource,aEvent,aParam){
    var myEvent = new Array(aSource,aEvent,aParam);
    theArrEventQueue.push(myEvent);
  }

  // class properties
  function SetEventInterval(aInterval){theInterval = aInterval;}
  function GetEventInterval(aInterval){return theInterval;}
  function SetEventQueue(aValue){theArrEventQueue=aValue;}
  function GetEventQueue (){return theArrEventQueue;}
  function GetRegistredEvents(){return theArrRegistredEvents;}
}