var AnimationRunning = false;
var AniImage 	= new Array();
var AniFrame 	= new Array();
var Timer		= null;

function CreateAnimationFrames(aniName, n)
{
	this.num_frames = n;
	for(var i=0 ; i<n ; i++)
	{
		this[i]=new Image();
		this[i].src = "./images/" + aniName + "/" + i + ".jpg";
	}
}

function CreateAnimatedImage(imgName, aniName)
{
	if(document.images)
	{
		this.img_name   = imgName;
		this.ani_name   = aniName;
		this.next_on    = null;
		this.next_off   = null;
		this.index      = 0;
		this.target_frame= 0;
		this.state      = "CLOSED";
		this.img	    = null;
	}
}

function AnimatedImage(imgName, aniName, n)
{
	if(AniFrame[aniName] == null) AniFrame[ aniName ]= new CreateAnimationFrames(aniName, n);
	AniImage[ imgName ] = new CreateAnimatedImage( imgName, aniName);
}

function getImage(n, d) 
{
	var img = d.images[n];
	if(!img && d.layers)  
		for(var i=0 ; !img && i<d.layers.length ; i++) 
			img=getImage(n,d.layers[i].document); 
	return img;
}

function startAnimation()
{
	if(!AnimationRunning)
		Animate();
}

function turn_on(imgName, aniName)
{
	var b=AniImage[ imgName ];
	if(b.img == null)
		b.img=getImage(imgName, document);
	if(b.state == "CLOSED" )
		{
		b.state = "OPENING";
		if(aniName) b.ani_name=aniName;
		startAnimation();
		}
	else if ( b.state == "OPEN_CLOSE" ||  b.state == "CLOSING" ||  b.state == "CLOSE_OPEN") 
			{
			if (!aniName || b.ani_name==aniName) b.state = "OPENING";
			else
				{
				b.next_on=aniName;
				b.state = "CLOSE_OPEN";
				}
			}
		 else if ( b.state == "OPENING" || b.state == "OPEN")
				 {
				 if (aniName && b.ani_name != aniName)
					{
				 	b.ani_name=aniName;
				 	b.index=0;
				 	b.state="OPENING";
				 	startAnimation();
				 	}
				 }
}

function turn_off(imgName, aniName)
{
	var b=AniImage[ imgName ];
	if( b.state == "OPEN")		
	{
		if(aniName)
		{
			b.ani_name=aniName;
			b.index=AniFrame[aniName].num_frames-1;
		}
		b.state = "CLOSING";
		startAnimation();
	}
	else if(b.state == "CLOSE_OPEN")
	{
		b.next_off=null;
		b.state="CLOSING"
	}
	else if( b.state == "OPENING" )
	{
		b.next_off = aniName;
		b.state = "OPEN_CLOSE";
	}
}

function Animate()
{	
	AnimationRunning = false;
	
	for(var i in AniImage)
	{
		var b=AniImage[i];
		var a=AniFrame[b.ani_name];

		if(b.state == "OPENING")
		{
			if(++b.index < a.num_frames)
			{
				b.img.src=a[b.index].src;
				AnimationRunning = true;
			}
			else
			{
				b.index=a.num_frames-1;
				b.state = "OPEN";
			}
		}
		else if(b.state == "OPEN_CLOSE")
		{
			if(++b.index < a.num_frames)
			{
				b.img.src=a[b.index].src;
			}
			else
			{
				if(b.next_off)
				{
					b.ani_name=b.next_off;
					a=AniFrame[b.ani_name];
					b.next_off=null;
				}
				b.index=a.num_frames-1;
				b.state = "CLOSING";
			}
			AnimationRunning = true;
		}
		else if(b.state == "CLOSING")
		{
			if(--b.index >= 0)
			{
				b.img.src=a[b.index].src;
				AnimationRunning = true;
			}
			else
			{
				b.index=0;
				b.state = "CLOSED";
			}
		}
		else if(b.state == "CLOSE_OPEN")
		{
			if(--b.index >= 0)
			{
				b.img.src=a[b.index].src;
			}
			else
			{
				b.index=0;
				b.ani_name=b.next_on;
				b.state = "OPENING";
			}
			AnimationRunning = true;
		}
		else if(b.state == "ROTATE_UP")
		{
			if(b.index != b.target_frame)
			{
				if(++b.index == a.num_frames)
					b.index = 0;
				b.img.src=a[b.index].src;
				AnimationRunning = true;
			}
			else
				b.state = "CLOSED";
		}
		else if(b.state == "ROTATE_DOWN")
		{
			if(b.index != b.target_frame)
			{
				if(--b.index < 0)
					b.index = a.num_frames-1;
				b.img.src=a[b.index].src;
				AnimationRunning = true;
			}
			else
				b.state = "CLOSED";
		}
	}
	if(AnimationRunning)
	{
		if(!Timer)
			Timer=setInterval("Animate()", 40);
	}
	else
	{
		clearInterval(Timer);
		Timer=null;
	}
}

