var AnimationRunning = false;
var FrameInterval = 50;
var NumButtons = 0;
var Btn = new Array();
var Anim = new Array();
var Index = new Array();
var base = "graphics/";

function CreateAnimationFrames(name, n, ext)
{
	this.num_frames = n;
	for(var i=0 ; i<n ; i++)
	{
		this[i]=new Image();
		this[i].src = base + name + "_" + i + ext;
	}
}
function CreateAnimatedImage(name, open_name, close_name, divname)
{
	if(document.images)
	{
		this.name       = name;
		this.ani_open   = open_name;
		this.ani_close  = close_name;
		this.index      = 0;
		this.targetFrame= 0;
		this.state      = "CLOSED";
		this.divname    = divname;
	}
	
}
function Animate()
{	
	AnimationRunning = false;

	for(var i=0 ; i<NumButtons ; i++)
	{
		var button=Btn[i];
		var ani_open  = Anim[button.ani_open];
		var ani_close = Anim[button.ani_close];
		var d = (button.divname && document.layers) ? 
				document.layers[button.divname].document : document;

		if(button.state == "OPENING")
		{
			if(button.index < ani_open.num_frames-1)
			{
				button.index++;
				d.images[button.name].src=ani_open[button.index].src;
				AnimationRunning = true;
			}
			else
			{
				button.state = "OPEN";
				button.index = ani_close.num_frames;
			}
		}
		else if(button.state == "OPEN_CLOSE")
		{
			if(button.index < ani_open.num_frames-1)
			{
				button.index++;
				d.images[button.name].src=ani_open[button.index].src;
			}
			else
			{
				button.state = "CLOSING";
				button.index = ani_close.num_frames;
			}

			AnimationRunning = true;
		}
		else if(button.state == "CLOSING")
		{
			if(button.index > 0)
			{
				button.index--;
				d.images[button.name].src=ani_close[button.index].src;
				AnimationRunning = true;
			}
			else
				button.state = "CLOSED";
		}
		else if(button.state == "CLOSE_OPEN")
		{
			if(button.index > 0)
			{
				button.index--;
				d.images[button.name].src=ani_close[button.index].src;
			}
			else
				button.state = "OPENING";

			AnimationRunning = true;
		}
		else if(button.state == "ROTATE_UP")
		{
			if(button.index != button.targetFrame)
			{
				button.index++;
				if(button.index == ani_open.num_frames)
					button.index = 0;
				d.images[button.name].src=ani_open[button.index].src;
				AnimationRunning = true;
			}
			else
				button.state = "CLOSED";
		}
		else if(button.state == "ROTATE_DOWN")
		{
			if(button.index != button.targetFrame)
			{
				button.index--;
				if(button.index <0 )
					button.index = ani_open.num_frames-1;
				d.images[button.name].src=ani_open[button.index].src;
				AnimationRunning = true;
			}
			else
				button.state = "CLOSED";
		}
	}
	if(AnimationRunning)
		setTimeout("Animate()",FrameInterval);
}
function start_animation()
{
	if(!AnimationRunning)
		Animate();
}
function turn_on(btn_name)
{
	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];

		if( ( b.state == "CLOSED" )
		 || ( b.state == "OPEN_CLOSE" ) )
		{
			b.state = "OPENING";
			start_animation();
		}
		else if ( b.state == "CLOSING" )
		{
			if(b.ani_open == b.ani_close)
				b.state = "OPENING";
			else
				b.state = "CLOSE_OPEN";

			start_animation();
		}
	}
}
function turn_on_using(btn_name, ani_name)
{
	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];
		b.ani_open = ani_name;
		turn_on(btn_name);
	}
}
function turn_on2(name)
{
	turn_on(name);
	turn_on(name + "2");
}
function turn_off(btn_name)
{
	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];

		if( b.state == "OPEN" || b.state == "CLOSE_OPEN")
		{
			b.state = "CLOSING";
			start_animation();
		}
		else if( b.state == "OPENING" )
		{
			b.state = "OPEN_CLOSE";
			start_animation();
		}
	}
}
function turn_off_using(btn_name, ani_name)
{
	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];
		b.ani_close = ani_name;
		if(b.state == "OPEN")
			b.index = Anim[ani_name].num_frames;
		turn_off(btn_name);
	}
}
function turn_off2(name)
{
	turn_off(name);
	turn_off(name + "2");
}
function AnimatedImage(name, open_name, close_name, divname)
{
	Btn[ NumButtons ] = new CreateAnimatedImage( name, open_name, close_name, divname);
	Index[name]       = NumButtons++;
}
function AnimationFrames(ani_name, n, ext)
{
	if(Anim[ani_name] == null)
		Anim[ ani_name ]= new CreateAnimationFrames(ani_name, n, ext);
	else
		;
}
function AnimatedGif(name, n, divname)
{
	AnimatedImage( name, name, name, divname);
	AnimationFrames(name, n, ".gif");
}
function AnimatedJpg(name, n, divname)
{
	AnimatedImage( name, name, name, divname);
	AnimationFrames(name, n, ".jpg");
}
function animate_to(frame_no, btn_name)
{
	var step;

	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];
		var ani = Anim[b.ani_open];

		b.targetFrame = frame_no;

		step = b.targetFrame - b.index;

		if(Math.abs(step) > (ani.num_frames/2))
		{
			if(step < 0)
				b.state = "ROTATE_UP";
			else
				b.state = "ROTATE_DOWN";
		}
		else
		{
			if(step > 0)
				b.state = "ROTATE_UP";
			else
				b.state = "ROTATE_DOWN";
		}
		start_animation();
	}

}
function animate_upto(frame_no, btn_name)
{
	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];

		b.targetFrame = frame_no;
		b.state       = "ROTATE_UP";

		start_animation();
	}
}
function animate_downto(frame_no, btn_name)
{
	if(Btn)
	{
		var b=Btn[ Index[btn_name] ];

		b.targetFrame = frame_no;
		b.state       = "ROTATE_DOWN";

		start_animation();
	}
}