// This code written by Walker Mangum
// Copyright 2008, Walker Mangum
// All rights reserved
var img_indx = 0;
var timer = null;
var playing = false;
var Images = new Array();
var date = new Date();
var Offsets = new Array("006", "012", "018", "024", "030", "036", "042", "048", "054", "060", "066", "072", "084", "096", "108", "120", "132", "144");
var Speeds = new Array(0.2, 0.5, 1.0, 1.5, 2.0, 5.0, 10.0, 15.0, 20.0);
var speed = 4;
var delay = 1000 / Speeds[speed];
var loop_delay = delay * 4;
for (i = 0; i < 18; ++i)
	Images[i] = new Image();
var Dates = new Array();

function animate() 
{
	var end = last_loaded();
	if (!document.control.rev_btn.checked)
	{
		if (++img_indx >= end)
		{ 
			if (!document.control.loop_btn.checked)
			{
				img_indx = end - 1; 
				stop();
			}
			else
				img_indx = 0;
		}
		if (playing)
		{
			if (img_indx < end - 1)
				timer = setTimeout("animate()", delay);
			else
				timer = setTimeout("animate()", loop_delay);
		}
	}
	else
	{
		if (--img_indx < 0)
		{ 
			if (!document.control.loop_btn.checked)
			{
				img_indx = 0; 
				stop();
			}
			else
				img_indx = end - 1;
		}
		if (playing)
		{
			if (img_indx > 0)
				timer = setTimeout("animate()", delay);
			else
				timer = setTimeout("animate()", loop_delay);
		}
	}
	if (playing)
		set_image(img_indx, end)
}

function set_image(n, end)
{
	if (Images[n].complete)
	{
		document.graphic.src = Images[n].src;
		document.graphic.alt = Dates[n];
		if (end == 18)
			document.getElementById("message").innerHTML = 'All images loaded';
		document.getElementById("time").innerHTML = Dates[n];
		if (!Images[n].height)
			document.graphic.alt = 'Image unavailable for ' + rundate + ' - select different forecast model run';
		document.getElementById("frame").innerHTML = 'Frame ' + (n+1);
		img_indx = n;
	}
}

function set_speed(dir) 
{
	newspeed = speed + dir;
	if (   newspeed >= 0
		&& newspeed < Speeds.length)
	{
		speed = newspeed;
		delay = 1000 / Speeds[speed];
		loop_delay = delay * 4;
	}
	document.getElementById("speed").innerHTML = 'Speed: ' + Speeds[speed] + ' frames/sec';
}

function last_loaded()
{
	var n = 0;
	for (i = 0; i < Images.length; ++i)
	{
		if (   Images[i].complete
			&& Images[i].height)
			n = i + 1;
	}
	return n;
}

function play(start)
{
	stop();
	var end = last_loaded();
	if (start)
	{
		if (!document.control.rev_btn.checked)
		{
			if (img_indx >= end - 1)
				img_indx = -1;
		}
		else
		{
			if (img_indx <= 0)
				img_indx = end;
		}
		playing = true;
		document.control.first_btn.disabled = true;
		document.control.next_btn.disabled = true;
		document.control.prev_btn.disabled = true;
		document.control.last_btn.disabled = true;
		document.control.play_btn.value = "Stop";
		animate();
	}
}

function stop() 
{
	if (playing)
	{
		clearTimeout(timer);
		playing = false;
		document.control.first_btn.disabled = false;
		document.control.next_btn.disabled = false;
		document.control.prev_btn.disabled = false;
		document.control.last_btn.disabled = false;
		document.control.play_btn.value = "Start";
	}
}

function show(indx)
{
	stop();
	var end = last_loaded();
	if (indx >= end)
		indx = end - 1;
	if (indx < 0)
		indx = 0;
	set_image(indx, end);
}

function loop(mode) 
{
	if (!playing && document.control.loop_btn.checked)
		play(true);
}

function start() 
{
	if (!playing)
	{
		img_indx = -1;
		play(true);
	}
}

function key(e)
{
	if (!e)
		e = window.event;
	switch (e.keyCode)
	{
	  case 76:
        document.control.loop_btn.checked = !document.control.loop_btn.checked;
        loop();
        break;
	  case 82:
        document.control.rev_btn.checked = !document.control.rev_btn.checked;
        play(playing);
        break;
	  case 83:
	  	start();
		break;
	  case 27:
	  	stop();
		break;
	  case 37:
		if (e.ctrlKey)
		{
			if (e.shiftKey)
				set_speed(-1);
			else
				show(0);
		}
		else
			show(--img_indx);
		break;
	  case 39:
		if (e.ctrlKey)
		{
			if (e.shiftKey)
				set_speed(1);
			else
				show(999);
		}
		else
			show(++img_indx);
		break;
	}
}


function init()
{
	document.onkeydown = key;
	document.getElementById("speed").innerHTML = 'Speed: ' + Speeds[speed] + ' frames/sec';
	for (i = 0; i < 18; ++i)
	{
		Images[i].src = "www.fnmoc.navy.mil.phtml?page=" + base + rundate + "/ngp10.prp." + Offsets[i] + "." + region + ".gif";
		if (i < 12)
			date.setTime((runtime + (i+1) * 6 * 3600) * 1000);
		else
			date.setTime((runtime + (i-5) * 12 * 3600) * 1000);
		Dates[i] = date.toLocaleDateString() + ' ' + date.toTimeString();
		if (!i)
		{
			document.getElementById("time").innerHTML = Dates[0];
			document.graphic.src = Images[0].src;
			document.graphic.alt = Dates[0];
		}
	}
	start();
}

