var G_Layers=new Array();
var G_Layer_index=0;
var G_firstlayer=true;

var hooked=new Array();
var hooked_idx=new Array();

var G_ticker=0;
var G_interval = null;

var G_sin=new Array();
var G_cos=new Array();

var preimage=new Array();
var totalpreimages=0;

var isNav4 = false;
var isNav6 = false;
var isIE4  = false;

Sp_xoffset=0;
Sp_yoffset=0;

////////// MAIN /////////////////////////
if (navigator.appVersion.charAt(0) == "4")
{
	if (navigator.appName.indexOf("Explorer") >= 0) isIE4 = true;
	else isNav4 = true;
}
else if (navigator.appVersion.charAt(0) > "4") isNav6 = true;

for(n=0;n<360;n++)
{
	G_sin[n]=(Math.sin(3.14159*n/180));
	G_cos[n]=-(Math.cos(3.14159*n/180))
}
/////////////////////////////////////////
function G_start()
{
	G_interval=setInterval("loop()",50)
}

function G_stop()
{
	clearInterval(G_interval)
}


function loop()
{
	Sp_spritesonscreen=0;
	var sp=null,sx=0,sy=0,sp2=null,sz=0;
	for(var n=0;n<Sp_totalsprites;n++)
	{
		sp=Sp_sprite[n];
		if(sp.on)
		{
			Sp_spritesonscreen++;
			if(sp.targetting)
			{
				Sp_x1=sp.x;
				Sp_x2=sp.targetting.x+sp.targettingx;
				Sp_y1=sp.y;
				Sp_y2=sp.targetting.y+sp.targettingy;
				if(Math.abs(Sp_x1-Sp_x2)>Math.abs(Sp_y1-Sp_y2))
				{
					Sp_ya=(Sp_x1-Sp_x2!=0)?Sp_x1-Sp_x2:1;
					sp.x+=(Sp_ya>0)?-sp.speed:sp.speed;
					sp.y-=((Sp_y1-Sp_y2)/Math.abs(Sp_ya))*sp.speed
				}
				else
				{
					Sp_xa=(Sp_y1-Sp_y2!=0)?Sp_y1-Sp_y2:1;
					sp.y+=(Sp_xa>0)?-sp.speed:sp.speed;
					sp.x-=((Sp_x1-Sp_x2)/Math.abs(Sp_xa))*sp.speed
				}
			}
			else
			{
/* zaokrouhlování je tu kvůli Mozille */
				sp.x+=Math.round(sp.xspeed);
				sp.y+=Math.round(sp.yspeed);
/**/
				if((sp.x!=sp.cx)||(sp.y!=sp.cy)||(Sp_xoffset!=Sp_cxoffset)||(Sp_yoffset!=Sp_cyoffset))
				{
					if((sp.x+sp.width>sp.xmax)&&sp.xdir>0)
					{
						if(sp.bounces)
						{
							sp.setDir(-sp.xdir,sp.ydir)
						}
						else
						{
							sp.x=sp.xmax-sp.width;
							sp.setDir(0,sp.ydir)
						}
					}
					else if(sp.x<sp.xmin&&sp.xdir<0)
					{
						if(sp.bounces)
						{
							sp.setDir(-sp.xdir,sp.ydir)
						}
						else
						{
							sp.x=sp.xmin;
							sp.setDir(0,sp.ydir)
						}
					}
					if((sp.y+sp.height>sp.ymax)&&sp.ydir>0)
					{
						if(sp.bounces)
						{
							sp.setDir(sp.xdir,-sp.ydir)
						}
						else
						{
							sp.y=sp.ymax-sp.height;
							sp.setDir(sp.xdir,0)
						}
					}
					else if(sp.y<sp.ymin&&sp.ydir<0)
					{
						if(sp.bounces)
						{
							sp.setDir(sp.xdir,-sp.ydir)
						}
						else
						{
							sp.y=sp.ymin;
							sp.setDir(sp.xdir,0)
						}
					}
				}
			}
			if(sp.beingfollowed)
			{
				for(var Sp_x=0;Sp_x<sp.followedby.length;Sp_x++)
				{
					Sp_a=sp.followedby[Sp_x];
					Sp_a.moveTo(sp.x+Sp_a.followingx,sp.y+Sp_a.followingy)
				}
			}
			if(sp.animspd>0 && sp.animtmr--==1 && sp.crepeat!=sp.animrepeat)
			{
				sp.animtmr=sp.animspd;
				sp.animpos+=sp.animd;
				if(sp.animpos<0)
					sp.animpos=sp.animsend;
				else if(sp.animpos==sp.anims)
					sp.animpos=sp.animsstart;
				sp.setAnimation(sp.animpos);
				if(sp.animrepeat!=-1)
					sp.crepeat++
			}
			else
			{
				sp.moveTo_l();
			}
		}
	}
	for(n=0;n<hooked.length;n++)
		eval(hooked[n])

	Sp_cxoffset=Sp_xoffset;
	Sp_cyoffset=Sp_yoffset;
	G_ticker++;
}

function G_hook(fnc)
{
	var temp = hooked.length;
	
	hooked[temp] = fnc;
	hooked_idx[temp]=G_ticker+'_'+Math.random();
	return hooked_idx[temp];
}

function G_unhook(fnc)
{
	var fnd = false;
	for(var n=0;n<hooked.length;n++)
		if(hooked[n]==fnc)
		{
			fnd=true;
			break
		}
	if(fnd)
	{
		for(var i=n;i<hooked.length-1;i++)
			hooked[i]=hooked[i+1];
			
		for(var i=n;i<hooked.length-1;i++)
			hooked_idx[i]=hooked_idx[i+1];
			
		hooked.length--;
		hooked_idx.length--;
	}
}

function G_unhook_idx(idx)
{
	var fnd = false;
	for(var n=0;n<hooked.length;n++)
		if(hooked_idx[n]==idx)
		{
			fnd=true;
			break
		}
	if(fnd)
	{
		for(var i=n;i<hooked.length-1;i++)
			hooked[i]=hooked[i+1];

		for(var i=n;i<hooked.length-1;i++)
			hooked_idx[i]=hooked_idx[i+1];

		hooked.length--;
		hooked_idx.length--;
	}
}

function G_preloader(img)
{
	var x = totalpreimages++;
	preimage[x]=new Image;
	preimage[x].src=img
	return x;
}

function G_scrollbars(G_a)
{
	G_a=G_a.toLowerCase();
	if(G_a=="off")
		G_a="no";
	else if(G_a=="on")
		G_a="yes";

	if(G_a=="yes"||G_a=="no")
	{
		if(isNav4)
			window.scrollbars.visible = ( (G_a=="yes") ? true : false);
		else if (isIE4)
			document.body.scroll=G_a;
/* v Mozille 0.8 to NEPRACUJE */
		else if (isNav6)
			document.body.style.overflow = ( (G_a=="yes") ? 'visible' : 'hidden'); 
	}
}

function f_null()
{
}

