function WaitEvent() {                                             
  this.eventA   = {};                                              
  this.onreadyA = [];                                              
  this.timersA  = [];                                              
  this.notimeout= true; // indicates if one trigger has timed out  
  this.parms    = {};                                              
}                                                                  
WaitEvent.prototype.add = function(event_,timeout) {    
	logit("add WaitEvent:"+event_);            
  var my = this;                                                   
  this.eventA[event_] = false;                                       
  if (timeout) {                                                   
    var intervalID = window.setTimeout(function() {                
      my.ready(event_); // ready whith this event_                   
      this.notimeout = false;  // at least one not timed out       
    },timeout);                                                    
    my.timersA.push(intervalId);                                   
  }                                                                
}                                                                  
WaitEvent.prototype.ready = function(event_) {
	logit("ready WaitEvent:"+event_);                      
  if (typeof(this.eventA[event_]) !== "undefined") {
		logit("ready WaitEvent:"+event_);                                              
    if (this.eventA[event_] === false) {                             
			logit("Evet ready:"+event_);                      
      this.eventA[event_] = true;                                  
      //this.checkready();                                           
    } else logit("event already false");                                                          
		this.checkready();                                           
	} else logit("not exists WaitEvent:"+event_+"/"+typeof(this.eventA[event_]));                                                               
}      
WaitEvent.prototype.checkready = function() {
	logit("checkready WaitEvent");                      
  // if 1 event_ is false then keep waiting            
  for (event_ in this.eventA) {
  	//logitA("event_/result",event_,this.eventA[event_]);                        
    if (this.eventA[event_] === false) {
    	//logit("need to wait longer");
    	return false;           
    } else {
    	//logit("event_ ready");
    }
  }                                                   
  // no event_ is false, trigger event_!                
  logit("trigger CB");
  this.onready();                                     
}                                                     
WaitEvent.prototype.addCB = function(CB) {      
  this.onreadyA.push(CB);                             
}                                                     
WaitEvent.prototype.addParm = function(name,value) {  
  this.parms.name = value;                            
}                                                     
WaitEvent.prototype.onready = function() {            
  $.each(this.timersA,function(key,value) {           
    clearTimeout(value);                              
  });                                                   
  $.each(this.onreadyA,function(key,value) {          
    value(this.parms,this.notimeout);                 
  });                                                 
}       
                                              

