phocusAPI=function(){};

$pr=phocusAPI.prototype;

$pr.dr='/';



$pr.register=function(_class)

{

	_class.prototype=new phocusAPI();

	_class.Catcher=this.Catcher;

	return _class.prototype;

}

$pr.trylist=function(arr)

{

	for(var i=0;i<arr.length;i++)

	{

		try

		{

			return arr[i]();

		} catch(e)

		{

			this.Catcher.log('WARNING!\r\ntrylist failure: '+e+'\r\n---------------------\r\n'+arr[i]+'\r\n---------------------');

		}

	}

	this.Catcher.log('Trylist exited without completing.');

	return false;

}

$pr.toString=function()

{

	return 'phocus javascript API V1.0 - By Liam Egan.';

}

$pr.discard=function(){};

phocus=new phocusAPI();

$ph=phocus;



phocus.Catcher=

{

	errors:[],

	debug:false,



	log:function(err)

	{

		this.errors.push(err);

		if(this.debug)

			alert(err);

	},

	dump:function()

	{

		for(var i=0;i<this.errors.length;i++)

			alert(this.errors[i]);

	}

};

phocus.Runtime=

{

	frequency:40,

	c:0,

	length:0,

	runlist:{},

	

	// object, method, variabled, delay	, runtime, end object, end method, end variables

	addrun:function(o,m,v,d,r,eo,em,ev)

	{

		var p=this;

		var id='run_'+(this.c++);

		var nv=[];

		if(v)

			for(var i=0;i<v.length;i++)

				nv.push(v[i]);

		nv.push(null);

		nv.push(null);

		

		this.runlist[id]={o:o,m:m,v:nv,d:d,r:r,rr:r,eo:eo,em:em,ev:ev,id:id,escape:function(){p.removerun(this.id);}};

		if(this.length==0)

			this.startrun();

		this.length++;

		return this.runlist[id];

	},

	removerun:function(id)

	{

		if(!this.runlist[id])

			return;

		

		delete this.runlist[id];

		this.length--;

		if(this.length==0)

			this.stoprun();

	},

	startrun:function(){var _method=this.run; var _object=this;this.timer=setInterval(function(){_method.apply(_object)}, this.frequency);},

	stoprun:function(){clearInterval(this.timer);},

	run:function()

	{

		for(var i in this.runlist)

		{

			var it=this.runlist[i];

			if(it.d-->0)continue;

			if(it.r>=0)

			{

				it.v[it.v.length-2]=it.r;

				it.v[it.v.length-1]=it.rr;

				var rtn=it.o[it.m].apply(it.o,it.v);

				it.r=typeof rtn=='number' ? rtn : it.r-1;

				if(it.r>=0)continue;

			}

			

			if(it.eo==null)

				it.eo=phocus;

			if(it.em==null)

				it.em='discard';

			if(it.ev==null)

				it.ev=[];

			

			it.eo[it.em].apply(it.eo,it.ev);

			

			this.endrun(i);

		}

	},

	endrun:function(i)

	{

		this.removerun(i);

	}

};
