






































Module('ca.carleton.gcrc.atlas.topicActivation','$Revision: 3456 $',function(mod){



var sortFunction=function(a,b){
var priorityA=a[0];
var priorityB=b[0];

if(priorityA<priorityB)return-1;
if(priorityA>priorityB)return 1;
return 0;
}






mod.ActivationManager=Class(function(publ,priv){





publ.__init__=function(
model_
,frameModel_
){

this.model=model_;


this.topicModel=frameModel_;


this.conditions=new Array();


this.computingRequired=false;
}










publ.AddCondition=function(
conditionFactory_
,topicLabel_
,priority_
){

var layer=this.model.LayerFromName('_global');
var feature=layer.FeatureFromId('topicActivation');


var condition=conditionFactory_.Create(feature);
condition.Parent(this);


var data=[priority_,condition,topicLabel_];
this.conditions.push(data);
var sorted=this.conditions.sort(sortFunction);
this.conditions=sorted;


this.Update();
}




publ.Update=function(){
this.computingRequired=true;
this.TryCallback();
}




publ.TryCallback=function(){
if(this.computingRequired){
if(false==this.model.busy){

var loop;
for(loop=0;loop<this.conditions.length;++loop){
var condition=this.conditions[loop][1];
if(condition.LogicalValue()){

var topicLabel=this.conditions[loop][2];
this.topicModel.SelectTopic(topicLabel);

break;
}
}

this.computingRequired=false;
}else{
var receiver=this;
this.model.RegisterForEndProcessing(function(){
receiver.TryCallback();
});
}
}
}
});

});
