// JavaScript Document
// simple timer helper functions
// code by Azer Manafov (azerman[at]hotmail[dot]com)
var TIMER_DELAY 	  = 50;

var TM_STATE_START    = 1;
var TM_STATE_RUN      = 2;
var TM_STATE_STOP     = 3;

var TIMER_STACK       = new Array( );

function tmProperties( id, callback  )
{   this.id       = id;
	this.callback = callback;
	this.state    = false;
}
function isTimer( id )
{   if (  id != null )
    {   for ( var i = 0; i < TIMER_STACK.length; i++ )
		{   if ( TIMER_STACK[i].id == id )
			{   return TIMER_STACK[i].state;
			}
		}
	}
	return false;
}
function setTimerCallback( fnTimerCallback )
{   var id = 1;
    for ( var i = 0; i < TIMER_STACK.length; i++ )
	{     if ( TIMER_STACK[i].id >= id ) id = TIMER_STACK[i].id+1;
		  if ( TIMER_STACK[i].callback == fnTimerCallback )
		       return;
	}
	var tm = new tmProperties( id, fnTimerCallback);
	TIMER_STACK.push( tm );	
	return id;
}
function removeTimerCallback( fnTimerCallback )
{   for ( var i = 0; i < TIMER_STACK.length; i++ )
	{   if ( TIMER_STACK[i].callback == fnTimerCallback )
		{   TIMER_STACK.splice( i,1);
			return;
		}
	}
}
function killTimer( id )
{   if ( id != null )
	{   for ( var i = 0; i < TIMER_STACK.length; i++ )
		{   if ( TIMER_STACK[i].id == id )
			{   TIMER_STACK[i].callback(TM_STATE_STOP);
				TIMER_STACK[i].state = false;
			    break;
			}
		}
	}
	else
	{   for ( var i = 0; i < TIMER_STACK.length; i++ )
		{   TIMER_STACK[i].callback(TM_STATE_STOP);
		    TIMER_STACK[i].state = false;
		}
	}
}
function setTimer( id )
{   if ( id != null )
	{   for ( var i = 0; i < TIMER_STACK.length; i++ )
		{   if ( TIMER_STACK[i].id == id )
		    {   TIMER_STACK[i].state = true;
			    TIMER_STACK[i].callback( TM_STATE_START );
				break;
			}
		}
	}
	else
	{   for ( var i = 0; i < TIMER_STACK.length; i++ )
		{   TIMER_STACK[i].state = true;
		    TIMER_STACK[i].callback( TM_STATE_START );
		}
	}
	timerRunner( id );
}

function timerRunner( id )
{   if ( !isTimer( id )) return;
	if ( id != null )
	{   for ( var i = 0; i < TIMER_STACK.length; i++ )
		{   if ( TIMER_STACK[i].id == id )
			{   TIMER_STACK[i].callback( TM_STATE_RUN );
			    self.setTimeout('timerRunner('+id+')', TIMER_DELAY);
			    break;
			}
		}
	}
	else
	{   for ( var i = 0; i < TIMER_STACK.length; i++ )
		      TIMER_STACK[i].callback( TM_STATE_RUN );
	    self.setTimeout("timerRunner( )", TIMER_DELAY);
	}
}
