var SOBS=new Array;
function SObject(){
this.timeout=10;
this.speed=50;
this.errors=new Array;
this.kJobs=new Array;
this.jobs=new Array;
this.args=new Array;
this.cJob=null;
this.cArgs=null;
this.interval=null;
this.cycles=0;
this.maxErrors=10;
this.id=SOBS.length;
SOBS[this.id]=this;
this.queue=function(_1,_2){
this.jobs.push(_1);
this.args.push(_2);
if(this.interval==null){
this.maxCycles=((this.timeout*1000)/this.speed);
this.interval=setInterval("SOBS["+this.id+"].process()",this.speed);
}
};
this.process=function(){
try{
if(this.cJob!=null){
if(this.cycles++>this.maxCycles){
this.kJobs.push(this.cJob);
throw new Error("Timing out job: "+this.kJobs[this.kJobs.length-1]);
}else{
if(this[this.cJob+"Check"]()){
this.resetProcessor();
}
}
}else{
if(this.jobs.length>0){
this.cJob=this.jobs.shift();
this.cArgs=this.args.shift();
if(this[this.cJob]!=undefined){
this[this.cJob]();
}
if(this[this.cJob+"Check"]==undefined){
this.resetProcessor();
}
}else{
clearInterval(this.interval);
this.interval=null;
this.resetProcessor();
}
}
}
catch(e){
this.resetProcessor();
this.addError(e);
}
};
this.resetProcessor=function(){
this.cJob=null;
this.cArgs=null;
this.cycles=0;
};
this.notify=function(_3){
this.queue("callBack",_3);
};
this.callBack=function(){
if(this.jobs.length>0){
this.queue("callBack",this.cArgs);
}else{
setTimeout(this.cArgs,0);
}
};
this.idle=function(){
return ((this.cJob==null)&&(this.jobs.length==0));
};
this.halt=function(_4){
clearInterval(this.interval);
this.addError(_4);
this.jobs=new Array;
this.args=new Array;
this.cJob=null;
this.cArgs=null;
};
this.addError=function(_5){
if(this.errors.length>=this.maxErrors){
this.errors.shift();
}
this.errors.push(_5);
};
this.getErrors=function(){
if(this.errors.length<1){
return false;
}
var _6="";
for(var i=0;i<this.errors.length;i++){
_6+=this.errors[i].toString()+"\n";
}
return _6;
};
}
function _Error_toString(){
var _8="";
_8+=this.description==undefined?this.message:this.description;
_8+=this.lineNumber==undefined?"":";line:"+this.lineNumber;
_8+=this.fileName==undefined?"":";file:"+this.fileName;
return _8;
}
Error.prototype.toString=_Error_toString;

